在Fluent NHibernate中,如何将自动化类型与非自动化类型相结合?
-
05-07-2019 - |
题
现在,我正在将项目从为每个域实体手动定义 ClassMap
的经典流畅的nhibernate风格转换为让自动映射器为我自动生成映射。但是我想继续使用我已经在经典风格中映射的类,直到我可以调整自动化以匹配旧的经典映射。
唯一的问题是当自动映射器遇到已经以经典流畅的nhibernate风格映射的类时,流畅的nhibernate崩溃。
这是我的 AutoPersistenceModel
设置代码:
_autoPersistenceModel = AutoMap.AssemblyOf<DomainEntity>();
_autoPersistenceModel.AddMappingsFromAssembly(typeof (PlayerPersistenceMap).Assembly);
_autoPersistenceModel.Alterations(x =>
x.Add<AutoMappingAlteration>())
.Setup(s =>
{
s.FindIdentity = type => type.Name == "ID";
s.IsBaseType = type => (type == typeof(DomainEntity));
})
.Conventions
.AddFromAssemblyOf<IdentityColumnConvention>()
.UseOverridesFromAssemblyOf<PlayerMappingOverride>();
有人可以帮助我吗?
更多信息:
我还尝试了在fluent-nhibernate wiki 这里上提到的技术。唉,我仍然收到错误:重复的类/实体映射
。
解决方案
wiki中的混合流畅的映射和自动映射示例应该有效,如果它没有那时候有一个错误。
作为解决方法,从您的自动化中排除已手动映射的类型。您可以使用 Where
方法,如wiki示例中所示,这样:
AutoMap.AssemblyOf<DomainEntity>()
.Where(type => type != typeof(OneOfYourManuallyMappedClasses));
如果你有很多流畅的映射,你可以创建一个集合来保持自动化设置的清洁:
var mappedTypes = new[] { typeof(One), typeof(Two) };
AutoMap.AssemblyOf<DomainEntity>()
.Where(type => !mappedTypes.Contains(type));
同样,这不应该是必要的,但如果您确定它不适用于wiki示例,那么我建议提出一个问题。
不隶属于 StackOverflow