1
仅当我在xml文件中设置property-ref时,才收到此异常。将nhibernate属性-ref设置为一对多为主键以外的其他属性失败
初始化[Domain.Entities.R#12345] -failed懒洋洋地初始化角色的集合:Domain.Entities.R.LP,没有会话或会话关闭
LP.hbm.xml
----------
<?xml version="1.0" encoding="utf-8" ?>
<hibernate-mapping xmlns="urn:nhibernate-mapping-2.2" namespace="Domain.Entities" assembly="Domain">
<class name="LP" table="LP">
<id name="Id">
<column name="Id" sql-type="int" not-null="true"/>
</id>
<property name="AnotherField"/>
<property name="PaymentDate"/>
<property name="PaymentAmount"/>
</class>
</hibernate-mapping>
R.hbm.xml
---------
<?xml version="1.0" encoding="utf-8" ?>
<hibernate-mapping xmlns="urn:nhibernate-mapping-2.2" namespace="Domain.Entities" assembly="Domain">
<class name="R" table="R">
<id name="Id">
<column name="Id" not-null="true"/>
</id>
<property name="AnotherField"/>
<set name="LP">
<key column="AnotherField" property-ref="AnotherField" />
<one-to-many class="Domain.Entities.LP" not-found="ignore" />
</set>
</class>
</hibernate-mapping>
IQueryable<Entities.R> query = _db.Query<Entities.R>();
var query2 = _db.Query<Entities.LP>().ToList();
var queryResults = query.ToList();
Iesi.Collections.Generic.ISet<Entities.LP> lp;
try
{
lp = queryResults.First().LP; <--- this fails with exception
}
catch (Exception ex)
{
Console.WriteLine(ex.Message);
}
finally
{
var lp2 = _db.Query<Entities.LP>().Take(100); <-- works just fine
}
我也不是什么明白为什么lp2设置正常,但lp失败?我知道数据模型并不理想,但这是我现在需要处理的。如果我从nhprof的xml文件中删除property-ref,我发现它调用SQL表(使用错误的值,所以我没有返回数据),但它不会失败。这只发生在我拥有property-ref集合时。
任何帮助将不胜感激。这是我与NH的第一次运行。
科林感谢您的回复。 ISession是由IoC创建的;我不明白的是我有一个有效的ISession在我正在使用的函数中。 This works ... ISession is used var lp2 = _db.Query().Take(100); 这不起作用,并且无法访问ISession。 var lp = queryResults.First()。LP; 所以问题是......为什么一条线能够访问ISession而另一条线不能? 再次感谢! –
ben
嗯,你说这条线路工作 var lp2 = _db.Query().Take(100); 但这是一个未评估的LINQ表达式。您是否尝试过实际访问lp2中的值(即迭代它们)? 此外,行查询LP对象。这不是问题。问题是访问R对象上的LP集合。除非我读错了,否则它们是两个完全不同的查询。 –