现在,我正在将我的项目从为每个域实体手动定义 ClassMap
的经典流畅 nhibernate 风格切换到让自动映射器为我自动生成映射。但我想继续使用我已经以经典样式映射的类,直到我可以调整自动映射以匹配旧的经典映射。
唯一的问题是,当自动映射器命中一个已经以经典的 fluent nhibernate 样式映射的类时,fluent 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
。
最佳答案
mixed fluent mappings and auto mappings example在 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 示例,那么我建议您提出问题。
关于c# - 在 Fluent NHibernate 中,如何将自动映射类型与非自动映射类型结合起来?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1603460/