现在,我正在将项目从为每个域实体手动定义 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示例,那么我建议提出一个问题。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top