2

现在,我正在将我的项目从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 here中提到的技术。唉,我仍然收到错误:Duplicate class/entity mapping.

4

1 回答 1

2

wiki 中的混合流利映射和自动映射示例应该可以工作,如果没有,则存在错误。

作为一种解决方法,请排除已从您的自动映射中手动映射的类型。您可以使用Wherewiki 示例中所示的方法来做到这一点,如下所示:

AutoMap.AssemblyOf<DomainEntity>()
  .Where(type => type != typeof(OneOfYourManuallyMappedClasses));

如果你有很多流畅的映射,你可以创建一个集合来保持自动映射设置干净:

var mappedTypes = new[] { typeof(One), typeof(Two) };

AutoMap.AssemblyOf<DomainEntity>()
  .Where(type => !mappedTypes.Contains(type));

同样,这不是必需的,但如果您确定它不适用于 wiki 示例,那么我建议您提出问题。

于 2009-10-22T09:02:57.897 回答