0

我正在使用 Fluent NHibernate 来自动映射我的实体。

这是我用于自动映射的代码:

new AutoPersistenceModel()
  .AddEntityAssembly(Assembly.GetAssembly(typeof(Entity)))
  .Where(type => type.Namespace.Contains("Domain") && type.BaseType != null && type.BaseType.Name.StartsWith("DomainEntity") && type.BaseType.IsGenericType == true)
  .WithSetup(s => s.IsBaseType = (type => type.Name.StartsWith("DomainEntity") && type.IsGenericType == true))
  .ConventionDiscovery.Add(
      ConventionBuilder.Id.Always(x => x.GeneratedBy.Increment())
);

这工作得很好。但是现在我需要在我的域的一个对象中进行 Eager Loading。找到了这个答案。但是当我将该行添加.ForTypesThatDeriveFrom<IEagerLoading>(map => map.Not.LazyLoad())到代码并运行它时,我得到以下异常:

  • 尝试为 IEagerLoading 构建映射文档时出错

请注意,我正在使用一个接口 ( IEagerLoading) 来标记我想要预加载的对象。

谁能帮助如何做到这一点?请记住,我想保留自动映射功能。

谢谢

4

1 回答 1

3

你遇到的问题是它ForTypesThatDeriveFrom<T>的名字有点误导,它真的意味着ForMappingsOf<T>,所以它试图找到一个ClassMap<IEagerLoading>显然不存在的。

我相信您应该能够使用 custom 来处理这个问题IClassConvention。这不在我的脑海中,但应该可以:

public class EagerLoadingConvention : IClassConvention
{
  public bool Accept(IClassMap target)
  {
    return GetType().GetInterfaces().Contains(typeof(IEagerLoading));
  }

  public void Apply(IClassMap target)
  {
    target.Not.LazyLoad();
  }
}
于 2009-05-05T17:17:40.863 回答