c# - 在 Fluent NHibernate 中,如何将自动映射类型与非自动映射类型结合起来?

标签 c# nhibernate orm fluent-nhibernate automapping

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

相关文章:

nhibernate - Orchard 如何处理元素?

nhibernate - 保存前如何在nHibernate和DDD中检查唯一性约束违规?

typescript - typeorm中如何正确使用和导出数据源

c# - 有没有办法将韩语单词分解成/从单个辅音/元音组成?

c# - 读取excel空/空白值

c# - 从 USB 输入读取位

c# - Windows 7 中的未授权访问异常

unit-testing - 单元测试流畅的 NHibernate。需要帮助理解测试期间发生的异常

php - 仅在生产中空左连接

javascript - NestJS、TypeORM,无法获取数据