【问题标题】:In Fluent NHibernate how do you combine automapped types with non-automapped types?在 Fluent NHibernate 中,如何将自动映射类型与非自动映射类型结合起来?
【发布时间】:2009-10-21 20:37:01
【问题描述】:

现在,我正在将我的项目从为每个域实体手动定义 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

【问题讨论】:

    标签: c# nhibernate orm fluent-nhibernate automapping


    【解决方案1】:

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

    【讨论】:

    • 我确实在我的 SchemaUpdate 相关代码中发现了一个错误,它可能触发了错误消息,但我不确定它们是否相关。今天我会用修复再次测试它,如果问题仍然存在,请在此处发表评论。感谢您的意见。
    • 嘿,我回去仔细检查了,如果我不做解决方法,那么我仍然会收到错误“重复的类/实体映射”
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-05-23
    • 2011-09-05
    • 1970-01-01
    • 2014-12-09
    相关资源
    最近更新 更多