使用NHibernate中的无状态会话初始化关联的实体或集合失败

我正在尝试与第三方dll中的实体建立关联。 出于某些原因,我必须使用StatelessSession 。 使用StatefullSession它可以工作,但不能使用Stateless。 我的想法是允许第三方添加一个表,并在查询主表时获取其数据。

我有三个项目:我的主项目,带有IExtender接口的模型项目,带有Extender类的第三方项目(未被主项目引用)。

我的数据架构:

 Table Data Id INT identity, more fields... Table Extender Id INT PK, FK from Data Name NVARCHAR more fields... 

型号项目代码:

 public interface IExtender { int Id { get; set; } } 

主要项目代码:

 public class Data { public virtual int Id { get; set; } public IExtender Extender { get; set; } //public IList Extenders { get; set; } } 

主要项目hbm:

        <!--   -->   

第三方项目:

 public class Extender : IExtender { public virtual int Id { get; set; } public string Name { get; set; } } 

第三方hbm:

            

第三方项目将其dll放在主项目bin文件夹中。

现在我获取数据的代码如下:

 var sessionFactory = new Configuration().Configure() .AddAssembly(Assembly.LoadFile(System.Environment.CurrentDirectory + @"\Extender.dll")) .AddAssembly(Assembly.GetExecutingAssembly()) .BuildSessionFactory(); var session = sessionFactory.OpenStatelessSession(); var criteria = session.CreateCriteria(); var data = criteria.List().ToList(); Console.WriteLine(data.First().Extender.Id); // fails because Extender is null 

如果我使用StatefullSession ,它可以在单个实体或包中正常工作。 如果我使用StatelessSession和一个包(并且列表作为上面的注释行),我收到一个错误:

无状态会话无法获取集合

如果我从包中删除了lazy="false" ,我会收到此错误(无论该集合是否为虚拟):

初始化[MyProject.Data#1] – 无法初始化角色集合:MyProject.Data.Extenders,没有关闭会话或会话

编辑:我将我的NHibernate版本升级到最新版本,现在它在我使用包时工作,但是当我使用一对一关系的单个实体时,它总是为空。

顺便说一下,无论是否有错误,我都会在最终的sql查询中看到Extender表正在正确连接。

谢谢你的帮助。