Fluent NHibernate仅在包含的导航属性中加载第一项

时间:2018-07-17 13:15:05

标签: c# nhibernate fluent-nhibernate automapper

在我的项目中,我们一起使用Fluent NHibernate和Automapper。例如,一个简单的GetById看起来像这样:

_session.Query<TObj>().Where(x => x.Id).ProjectTo<TMap>(_mapper.ConfigurationProvider).FirstOrDefaultAsync();

TObj看起来像这样

public virtual int Id { get; set; }
public virtual IList<TChild> Children { get; set; }

具有这样的映射:

Id(x => x.Id).GeneratedBy.Identity();
HasMany(x => x.Children);

TChild看起来像这样:

public virtual int Id { get; set; }
public virtual string Name { get; set; }
public virtual TObj Parent { get; set; }

具有映射:

Id(x => x.Id).GeneratedBy.Identity();
Map(x => x.Name);
References(x => x.Parent);

在所有这些之后,我的Automapper配置将这些对象转换为较小的DTO。例如:

CreateMap<TObj, ObjDto>()
    .ForMember(x => x.Id, y => y.MapFrom(z => z.Id))
    .ForMember(x => x.Children, y => y.MapFrom(z => z.Children))
    .ForMember(x => x.ChildCount, y => y.MapFrom(z => z.Children.Count));
CreateMap<TChild, ChildDto>()
    .ForMember(x => x.Id, y => y.MapFrom(z => z.Id))
    .ForMember(x => x.Name, y => y.MapFrom(z => z.Name));

所以ObjDto看起来像这样:

public int Id { get; set; }
public int ChildCount { get; set; }
public List<ChildDto> Children { get; set; }

现在我的问题:

  1. 如果我运行此代码,则会收到错误消息“必须是可还原节点”。我不知道这是什么意思。但是我注意到,只有当我得到ChildCount和我的孩子时,这种情况才会发生。如果我评论这两者之一,就不会发生。

  2. 如果我评论我的孩子,则ChildCount属性的值为3。这是正确的。但是,如果我评论ChildCount属性并仅获得Children,则Children中只有一个孩子。怎么可能呢?

0 个答案:

没有答案