我正在使用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。找到this answer。但是当我将代码行.ForTypesThatDeriveFrom<IEagerLoading>(map => map.Not.LazyLoad())
添加到代码并运行它时,我得到以下异常:
请注意,我正在使用接口(IEagerLoading
)来标记我想要加载的对象。
任何人都可以帮忙怎么做?请记住,我想保留自动映射功能。
由于
答案 0 :(得分:3)
你遇到的问题是ForTypesThatDeriveFrom<T>
有点误导性命名,而且它确实意味着ForMappingsOf<T>
,所以它试图找到一个显然不存在的ClassMap<IEagerLoading>
我相信您应该可以使用自定义IClassConvention
处理此问题。这是我的头脑,但应该工作:
public class EagerLoadingConvention : IClassConvention
{
public bool Accept(IClassMap target)
{
return GetType().GetInterfaces().Contains(typeof(IEagerLoading));
}
public void Apply(IClassMap target)
{
target.Not.LazyLoad();
}
}