首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >HashedSet.cs & DictionarySet.cs在哪里?

HashedSet.cs & DictionarySet.cs在哪里?
EN

Stack Overflow用户
提问于 2012-05-15 19:06:42
回答 2查看 1.5K关注 0票数 1

这是我的基本情况。我试图使用NHibernate从数据库中获取信息,根据映射创建一些对象,序列化它们,并将序列化的对象移动到闪存组件上。没有生成错误,但是当我返回‘序列化’对象时,它一直返回null。插入一些断点后,我意识到一切都往南走。

我把我的断点放在这里:

代码语言:javascript
复制
var tasks = (List<CSH_Task>)persistanceManager.RetrieveAll<CSH_Task>(SessionAction.BeginAndEnd);

它进入了我的PersistanceManager类,成功地传递了我的CSH_Task:

代码语言:javascript
复制
public IList<T> RetrieveAll<T>(SessionAction sessionAction)
    {
        /* Note that NHibernate guarantees that two object references will point to the
         * same object only if the references are set in the same session. For example,
         * Order #123 under the Customer object Able Inc and Order #123 in the Orders
         * list will point to the same object only if we load Customers and Orders in 
         * the same session. If we load them in different sessions, then changes that
         * we make to Able Inc's Order #123 will not be reflected in Order #123 in the
         * Orders list, since the references point to different objects. That's why we
         * maintain a session as a member variable, instead of as a local variable. */

        // Open a new session if specified
        if ((sessionAction == SessionAction.Begin) || (sessionAction == SessionAction.BeginAndEnd))
        {
            m_Session = m_SessionFactory.OpenSession();
        }

        // Retrieve all objects of the type passed in
        ICriteria targetObjects = m_Session.CreateCriteria(typeof(T));
        IList<T> itemList = targetObjects.List<T>();

        // Close the session if specified
        if ((sessionAction == SessionAction.End) || (sessionAction == SessionAction.BeginAndEnd))
        {
            m_Session.Close();
            m_Session.Dispose();
        }

        // Set return value
        return itemList;
    }

它直接来自一个旧的NHibernate实例(我对它非常陌生),它把我放到了一个“无源可用”页面中,其中列出了以下内容

调用堆栈位置: Iesi.Collections.DLL!Iesi.Collections.Generic.HashedSet.HashedSet() 18号线 源文件信息: 'd:\CSharp\NH\NH_Hg\nhibernate\src\Iesi.Collections\Generic\HashedSet.cs'.的定位源校验和: MD5 {d3 1c 6c 95 94 c0 cb d4 b5 8d 8c 42 c5 4a 37 b2} 文件'd:\CSharp\NH\NH_Hg\nhibernate\src\Iesi.Collections\Generic\HashedSet.cs‘不存在。 查看'd:\CSharp\NH\NH_Hg\nhibernate\src\Iesi.Collections\Generic\HashedSet.cs'...的脚本文档 寻找'd:\CSharp\NH\NH_Hg\nhibernate\src\Iesi.Collections\Generic\HashedSet.cs'.的项目 在项目中找不到该文件。 查看目录‘C:\程序文件(X86)\MicrosoftVisualStudio10.0\VC\crt\src\’. 查看目录‘C:\程序文件(X86)\10.0\VC\atlmfc\src\mfc\. 查看目录‘C:\程序文件(X86)\10.0\VC\atlmfc\src\atl\’. 查看目录‘C:\程序文件(X86)\MicrosoftVisualStudio10.0\VC\atlmfc\include\’.在目录‘C:\Users\tackiean\Desktop\’. 查找目录‘E:\SmartMC\NHibernate\必需_Bins\’. 来源在'E:\SmartMC\NHibernate\Required_Bins\HashedSet.cs'. 确定下列位置的校验和是否匹配: 1:E:\SmartMC\NHibernate\Required_Bins\HashedSet.cs校验和: MD5 {40 1b 39 7e 8f4a 3f6 11 41 88 70 9e 8f8 f1}校验和不匹配。 活动解决方案的调试源文件设置指示调试器不会要求用户查找文件: d:\CSharp\NH\NH_Hg\nhibernate\src\Iesi.Collections\Generic\HashedSet.cs.。 调试器无法找到源文件'd:\CSharp\NH\NH_Hg\nhibernate\src\Iesi.Collections\Generic\HashedSet.cs'.。

如果我继续遍历它,返回到我的代码,那么回到这里,列出一个几乎相同的关于DictionarySet.cs的消息

首先,我不是在这台机器上下载这个项目的NHibernate的人,但是我可以想象,如果HashedSet.cs/DictionarySet.cs需要它工作,那么它们在默认情况下不会被包含?今天我花了大约7个小时来寻找答案,但我现在空手而归。我以前从未见过这样的错误。我认为它只是在寻找一个NHibernate需要的文件,却找不到,但是这里还有什么其他的东西吗?任何帮助都将不胜感激。我希望这是一个合适的位置/清晰地格式化;我以前从未在这里提出过任何问题,所以我希望这不是完全不合适的。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-05-16 17:30:15

HashedSet和DictionarySet是Iesi.Collections的一部分,这是NHibernate中包含的一个集合库。NHibernate的二进制包通常包括包含程序集调试信息的.pdb文件。当调试器想要打开源文件时,它在您的机器上找不到它们,因为包含的源路径是包维护者的源路径。

如果愿意,可以在NHibernate上下载GitHub源代码并自己编译程序集。然后,当出现异常时,调试器将自动找到源文件(编译后不要移动源文件)。

您应该修改一下您的RetrieveAll方法,因为您必须始终打开一个会话并在某个地方关闭它。通常,你会做这样的事情:

代码语言:javascript
复制
using (ISession sess = factory.OpenSession())
using (ITransaction tx = sess.BeginTransaction())
{
    try
    {
        var crit = sess.CreateCriteria<T>();
        var list = crit.List<T>();

        // Do something with list

        tx.Commit();
    }
    catch (Exception)
    {
        tx.Rollback();
    }
}

如果要将查询列表返回给调用方,则会话将被关闭。因此,请确保在您的查询列表中没有留下任何非初始化的延迟加载代理。您可以阅读NHibernate文档中的惰性/急切加载部分。希望,我能帮你解决一下问题。

票数 0
EN

Stack Overflow用户

发布于 2012-05-17 10:49:28

您看到的消息是您的调试器试图查找源代码,因为您正在逐步执行它。计算机上缺少该源代码不会影响NHibernate运行时。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/10607213

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档