Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/309.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/templates/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
c#Fluent NHibernate一对多关系对象返回null_C#_Fluent Nhibernate_Automapper - Fatal编程技术网

c#Fluent NHibernate一对多关系对象返回null

c#Fluent NHibernate一对多关系对象返回null,c#,fluent-nhibernate,automapper,C#,Fluent Nhibernate,Automapper,我真的很想弄明白,但是我看不见穿过树林的光线。可能错过了一些明显的东西 在数据库中,当我创建对象时,它可以解决任何问题,但当我尝试列出值时,链接为空 有两个对象,问题和响应。一个问题可能有许多答案,因此以下是模型: public class Question { public int Id { get; set; } public int QuestionNumber { get; set; } public string QuestionText { get; set;

我真的很想弄明白,但是我看不见穿过树林的光线。可能错过了一些明显的东西

在数据库中,当我创建对象时,它可以解决任何问题,但当我尝试列出值时,链接为空

有两个对象,
问题
响应
。一个问题可能有许多答案,因此以下是模型:

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; }
}
公开课问题
{
公共int Id{get;set;}
公共整数问题编号{get;set;}
公共字符串QuestionText{get;set;}
公共IList响应{get;set;}
公众问题(
{
响应=新列表();
}
}
公众课堂反应
{
public int Id{get;private set;}
公共问题{get;set;}
公共int响应值{get;set;}
公共字符串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);
    }
}
公共类问题地图:类地图
{
公共问题地图()
{
Id(q=>q.Id);
Map(q=>q.QuestionNumber);
Map(q=>q.QuestionText).Length(300).Not.Nullable();
有许多(q=>q.Responses);
}
}
公共类响应映射:类映射
{
公众回应地图(
{
Id(x=>x.Id);
引用(x=>x.Question).Not.Nullable();
Map(x=>x.ResponseText);
Map(x=>x.ResponseValue);
}
}
所以当我使用

var responses = _session.CreateCriteria(typeof(Response)).List<Response>();
var responses=\u session.CreateCriteria(typeof(Response)).List();

调试并查看问题对象,它总是空的。

默认情况下,NHibernate中的所有关系都是惰性的。所以你有两个选择。在映射中为响应设置Not.LazyLoad()或Fetch策略,或者在查询数据库时执行Fetch

var responses = _session.CreateCriteria(typeof (Response))
                .SetFetchMode("Responses", NHibernate.FetchMode.Eager)
                .List();
使用.SetFetchMode(…)时,可能需要在响应映射中设置抓取策略。只需使用这两种设置—一次一种或同时使用两种设置


PS:顺便说一下,我不知道到底怎么回事。lazyload和fetch正在工作,并就此发布了一个问题

这不起作用-仍然返回null。我已经从另一个角度对此进行了研究,但我会将其标记为已解决,然后将其删除为答案并发布您的解决方案。你为什么否决我的答案?因为它对你不起作用?@Matt如果可以,请发布你的解决方案。