现在,我正在将我的项目从经典流畅的nhibernate风格转换为为每个域实体手动定义ClassMap
,让自动映射器为我自动生成映射。但是我想继续使用我已经在经典风格中映射的类,直到我可以调整自动化以匹配旧的经典映射。
唯一的问题是当自动映射器遇到已经以经典流畅的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 here中提到的技术。唉,我仍然收到错误:Duplicate class/entity mapping
。
答案 0 :(得分:2)
wiki中的mixed fluent mappings and auto mappings example应该可以正常工作,如果没有,则会出现错误。
作为解决方法,从您的自动化中排除已手动映射的类型。您可以使用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示例,那么我建议提出一个问题。