在Fluent NHibernate中,如何将自动化类型与非自动化类型相结合?

时间:2009-10-21 20:37:02

标签: c# nhibernate orm fluent-nhibernate automapping

现在,我正在将我的项目从经典流畅的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

1 个答案:

答案 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示例,那么我建议提出一个问题。