真的试图绕过这个,但看不到光线穿过树林。可能错过了一些明显的东西!
在我创建对象的数据库中,它可以解决任何问题,但是当我尝试列出值时,链接为空...
有两个对象Question
和Response
。一个问题可以有很多回答,所以这里是模型:
public class Question
{
public int Id { get; set; }
public int QuestionNumber { get; set; }
public string QuestionText { get; set; }
public IList<Response> Responses { get; set; }
public Question()
{
Responses = new List<Response>();
}
}
public class Response
{
public int Id { get; private set; }
public Question Question { get; set; }
public int ResponseValue { get; set; }
public string ResponseText { get; set; }
}
以下是映射:
public class QuestionMap : ClassMap<Question>
{
public QuestionMap()
{
Id(q => q.Id);
Map(q => q.QuestionNumber);
Map(q => q.QuestionText).Length(300).Not.Nullable();
HasMany<Response>(q => q.Responses).Inverse().AsBag();
}
}
public class ResponseMap : ClassMap<Response>
{
public ResponseMap()
{
Id(x => x.Id);
References<Question>(x => x.Question).Not.Nullable();
Map(x => x.ResponseText);
Map(x => x.ResponseValue);
}
}
所以当我使用
时var responses = _session.CreateCriteria(typeof(Response)).List<Response>();
并调试并查看Question对象,它始终为null。
答案 0 :(得分:0)
默认情况下,NHibernate中的所有关系都是惰性的。所以你有两个选择。在映射中为响应设置Not.LazyLoad()或Fetch策略,或者在查询数据库时执行提取。
var responses = _session.CreateCriteria(typeof (Response))
.SetFetchMode("Responses", NHibernate.FetchMode.Eager)
.List();
当您使用.SetFetchMode(...)时,可能需要在响应映射中设置提取策略。只需使用这两个设置 - 一次一个或两个
PS:顺便说一下,我很困惑,究竟是怎么回事.lazyload和fetch正在发挥作用,并发布了一个问题。 FluentNHibernate: LazyLoad and Fetch