映射抽象类和子类时NHibernate DuplicateMappingException

2024-01-21

我有一个抽象类及其子类,我想使用 NHibernate 将其映射到我的数据库。我在用着Fluent https://github.com/FluentNHibernate/fluent-nhibernate/wiki/Fluent-configuration以及如何进行映射。但是当我添加子类的映射时,映射时会抛出 NHibernate.DuplicateMappingException 。为什么?

这是我的(简化的)课程:

public abstract class FieldValue
{
    public int Id { get; set; }
    public abstract object Value { get; set; }
}

public class StringFieldValue : FieldValue
{        
    public string ValueAsString { get; set; }
    public override object Value
    {
        get
        {
            return ValueAsString; 
        } 
        set
        {
            ValueAsString = (string)value; 
        }
    } 
}

和映射:

public class FieldValueMapping : ClassMap<FieldValue>
{
    public FieldValueMapping()
    {
        Id(m => m.Id).GeneratedBy.HiLo("1");
        // DiscriminateSubClassesOnColumn("type"); 
    }
}

public class StringValueMapping : SubclassMap<StringFieldValue>
{
    public StringValueMapping()
    { 
        Map(m => m.ValueAsString).Length(100);
    }
}

还有例外:

> NHibernate.MappingException : Could not compile the mapping document: (XmlDocument)
  ----> NHibernate.DuplicateMappingException : Duplicate class/entity mapping NamespacePath.StringFieldValue

有任何想法吗?


发现了问题。事实证明,我确实在用于配置数据库的 PersistenceModel 中多次引用了同一个程序集:

public class MappingsPersistenceModel : PersistenceModel
{
    public MappingsPersistenceModel()
    {
        AddMappingsFromAssembly(typeof(FooMapping).Assembly);
        AddMappingsFromAssembly(typeof(BarMapping).Assembly);
        // Where FooMapping and BarMapping is in the same Assembly. 
    }
}

显然这对于​​ ClassMap 映射来说不是问题。但对于 SubclassMap 它也不能处理它,从而导致重复映射 - 从而导致 DuplicateMappingException。删除 PersistenceModel 中的重复项可以解决该问题。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

映射抽象类和子类时NHibernate DuplicateMappingException 的相关文章

随机推荐

  • 如何将 Bundle Config 添加到 Startup.cs 以便在 Razor 视图中使用资源?

    问题 如何向 Startup cs ASP NET Core 项目 添加与 App Start gt BundleConfig cs 相同的配置 当有 public class BundleConfig For more informati
  • 重新安装纱线时出现问题 - 代码:“MODULE_NOT_FOUND”

    Node js 版本 14 0 0 OS MacOS 10 15 4 范围 安装 代码 运行时 元 其他 纱线安装 模块 和版本 如果相关 内部 模块 cjs loader js 运行任何 Yarn 命令后 我收到以下错误 这是重新安装并执
  • 无法插入到 Supabase 中具有经过身份验证的角色策略的表

    我正在尝试在启用了 RLS 的表中插入一行Enable insert for authenticated users only政策已添加 不幸的是 即使我正确登录 我也无法插入 重现步骤 创建提交表 create table submiss
  • PHP 部分缓存

    我想部分缓存一些 php 文件 例如 所以缓存的页面应该像 缓存 php h1 This section is fixed today h1 div goodbye please visit todays suggested website
  • AppleScript 在 Finder 中设置目录路径

    我正在尝试通过 AppleScript 删除计算机上的文件 当我应用下面的代码时 似乎从桌面上删除了该文件 我想删除 Users andrew Documents 中的文件 下面是从桌面删除文件的代码 tell application Fi
  • 使用 Rspec 存根 File.open

    我正在尝试存根 File open 以测试读取 CSV 文件的方法 这是模型 class BatchTask def import filename CSV read filename row sep gt r col sep gt end
  • 适用于超大时间序列的最佳索引数据结构

    我想询问 SO 们关于用于索引时间序列 又名按列数据 又名平面线性 的最佳数据结构的意见 根据采样 离散化特征 存在两种基本类型的时间序列 常规离散化 每个样本都以共同频率采集 不规则离散化 任意时间点采样 需要的查询 时间范围 t0 t1
  • 泛型方法和方法重载

    方法重载允许我们定义许多具有相同名称但具有不同参数集的方法 因此具有相同的名称但不同的签名 这两个方法是否重载 class A public static void MyMethod
  • 找不到`SQLitePCLRaw.batteries_v2`

    我添加了一个sqlite net pclNuGet 包到 Xamarin iOS 项目 该应用程序以以下异常结束 找不到程序集引用的 SQLitePCLRaw batteries v2 SQLite net 版本 1 1 0 0 文化 中性
  • 从 .html 文件读取其内容的简单 Flask 应用程序。外部样式表被阻止?

    我制作了一个非常简单的 Flask 应用程序 它从 html 文件读取其内容 除了样式之外 该应用程序可以正常工作 奇怪的是 我的内联 CSS 代码可以工作 但外部样式表却不能工作 我已经检查过语法 它应该可以工作 Flask 是否会以某种
  • 如何编写可变参数模板递归函数?

    我正在尝试编写一个可变参数模板constexpr计算给定模板参数总和的函数 这是我的代码 template
  • 快速安全的加密算法 C#

    我正在寻找一种使用 C 实现的快速且安全的加密算法 我需要能够恢复初始消息 你有什么建议 感谢您的帮助 如果需要非对称加密 请使用 2048 位 RSA 如果您可以使用对称加密 请使用 256 位 AES MSDN 参考 系统 安全 密码学
  • 自动调整用户表单大小

    目标是一个可以自动调整大小以显示所有可见控件但没有额外死区的用户窗体 顶部始终可见 3 个组合框 但在其下方是 26 个标签及其关联的 5 个选项按钮 复选框 这 26 行将全部开始隐藏 并且仅在特定条件下可见 三个组合框中的第一个将说明
  • 如何使用 DataTemplates 通过 ViewModel-First 方法缓存动态切换的视图

    我在用GalaSoft MvvmLight框架 我的一些看法MainWindow xaml我通过用户选择在运行时动态地在它们之间切换 这些视图使用以下技术与其相应的视图模型绑定 主窗口 xaml
  • 如何将存储库镜像同步到新的上游存储库

    我有一个仓库镜像服务器 myrepo 最初是为了镜像而创建的 与远程同步 repoA 也就是说 我使用类似以下的内容来创建它 cd myrepo repo init u git repoA server manifest git mirro
  • RedHat Enterprise Linux 5.3 及以上版本不正确支持 sem_timedwait?

    我们在使用 pthreadsem timedwait 的 RedHat Enterprise Linux 系统上看到了奇怪的行为 仅 5 3 及以上版本才会出现此情况 当我们使用 sem init 在后台线程上创建信号量时 不会返回错误 当
  • Xcode 错误:缺少必需的模块“Firebase”

    问题 我有一个动态框架 它使用Firebase由 cocoapods 添加 我还有应用程序 它使用这个动态框架 但是当我尝试构建项目时出现错误Missing required module Firebase 我尝试了以下方法 删除派生数据
  • 持续监控前 X 个进程的 CPU 使用率

    我希望能够每 5 秒将最高 CPU 消耗者输出到日志文件 这样我就可以在测试期间看到谁使用了最多的 cpu 我发现这个答案很常见 cpu Get Counter ComputerName localhost Process Processo
  • Mojolicious 中用于处理不同路径的全局变量和线程

    在我的 Mojolicious perl 代码中 我处理从远程客户端创建和监视的作业 我将作业保存在哈希数组中 这是一个全局变量 然后它在 PUT job create 和 GET job status 的处理程序中使用 当使用 PUT j
  • 映射抽象类和子类时NHibernate DuplicateMappingException

    我有一个抽象类及其子类 我想使用 NHibernate 将其映射到我的数据库 我在用着Fluent https github com FluentNHibernate fluent nhibernate wiki Fluent config