Fluent nhibernate:如何映射具有类型为接口的属性的实体?

2024-02-04

我有一个像这样的实体:

public class Employee
{
    public int ID { get; set; }
    public IAccountManager AccountManager { get; set; }
    ...
}

我还为“DefaultAccountManager”定义了一个映射 - IAccountManager 的具体实现。当映射上面的“Employee”实体时,我如何告诉 NHibernate 使用“DefaultAccountManager”中定义的映射来持久/加载 AccountManager 属性?

Edit:实际上,如果我可以为 IAccountManager 设置一个映射,以便 NHibernate 可以推断要加载/持久的实现者,那就更好了。我宁愿不必通过强制所有实现者使用相同的映射来破坏多态性。


我确实找到了这个问题的答案。我对细节有点模糊,因为这是几个月前的事,但以下是解决方案的要点:

  • 为具有映射的 IAccountManager 的每个实现创建一个表。
  • 确保您的数据库设置为使用 HiLo id 算法。
  • 在映射中使用联合子类

联合子类看起来像这样:

<class name="IAccountManager" abstract="true">
  <id name="ID" column="ID" type="Int32">
    <generator class="hilo"/>
  </id>
  <union-subclass name="DefaultAccountManager" table="DefaultAccountManager"
      proxy="IAccountManager">
    <property name="FirstName" type="String"/>
    <property name="LastName" type="String"/>
  </union-subclass>
  ... more implementations
</class>

请注意联合子类上的属性“名称”。对于 IAccountManager 的每个实现来说,这应该是唯一的(并且匹配)。

此外,ID 对于每个表来说不是唯一的,而是对于所有 IAccountManager 来说都是唯一的(通过利用 hilo)。

当 NHibernate 看到 IAccountManager 实体时,它将使用实例的具体类型和联合子类定义来找出正确的表。

希望这可以帮助!

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

Fluent nhibernate:如何映射具有类型为接口的属性的实体? 的相关文章

随机推荐

  • 如何给 CSS 动画添加物理效果?

    我只是使用 CSS 制作一个加载屏幕 我希望它具有物理上准确的行为 我正在尝试与animation timing function cubic bezier 1 0 1 1 看起来不错 但不像我想要的那么真实 一开始因为我不知道该怎么做cu
  • Visual Studio Code-无法打开源文件“iostream”

    我只想尝试使用 Visual Studio 代码进行 C 编码 我已经在我的笔记本电脑 Win10 64 上安装了 vscode 1 18 1 我通过输入以下代码出现错误 include
  • 从相机拍摄照片后如何跳过“重拍并使用”选项

    从相机捕获照片后如何跳过 重拍和使用 选项 或者如何更改这些按钮的字体和颜色 我们使用了以下代码 self gimgPicker GKImagePicker alloc init self gimgPicker cropSize CGSiz
  • 在 AWS Elastic Beanstalk 上部署 Tornado 应用程序

    我有一个服务器写在Python 2 7 龙卷风我正在尝试将其部署在 AWS 上 我碰到AWS 弹性豆茎这看起来是部署代码的一种非常方便的方法 我经历过这个tutorial http docs aws amazon com elasticbe
  • 让 Visual Studio 在每次构建时运行 T4 模板

    如何让 T4 模板在每次构建时生成输出 就像现在一样 只有当我对模板进行更改时 它才会重新生成它 我还发现了其他类似的问题 Visual Studio 中的 T4 转换和构建顺序 https stackoverflow com questi
  • Outlook 中的网址中的双斜杠

    您的搜索页面的 URL 是这样构建的 http www example com results name John city Miami gender Male这将显示迈阿密所有名为约翰的男性 当其中一个过滤器留空时 网址将如下所示 htt
  • 获取视频文件的尺寸

    python 有没有办法获取视频文件或其他库的尺寸来实现这一点 相当于一个Media Info或者其他的东西 如果我理解正确的话 你指的是视频的分辨率 例如 768x432 这可以简单地使用 python 中的 opencv 来完成 imp
  • 在 XmlDocument 中加载 xml 文件时出错

    您好 我有下面的 xml 文件 我正在尝试使用下面的代码将其加载到 xml 文档中 XmlDocument Doc new XmlDocument Doc LoadXml C MappingFiles InputFile xml 但它抛出错
  • 如何从我的应用程序打开网页?

    我想让我的 WPF 应用程序打开默认浏览器并转到某个网页 我怎么做 对于 NET 桌面版本 System Diagnostics Process Start http www webpage com 对于 NET Core 默认为Proce
  • C++ 中的自定义事件?

    是否可以在 C 中创建自定义事件 例如 假设我有变量 X 和变量 Y 每当 X 发生变化时 我想执行一个将 Y 设置为 3X 的函数 有没有办法创建这样的触发器 事件 触发器在某些数据库中很常见 这基本上是观察者模式的一个实例 正如其他人提
  • Pandas groupby 和多索引

    pandas 是否有机会通过 MultiIndex 对数据进行分组 我的意思是不仅传递给 groupby 函数键 还传递键和值来预定义数据帧列 a np array foo foo foo bar bar foo foo dtype obj
  • 未找到数据源名称且未指定默认驱动程序

    我被要求将使用 MVP 模式的 WinForms 应用程序移植到网页上 除其他外 该应用程序将 CSV 文件上传到数据表 然后执行一些工作 CSV文件上传到服务器OK然后用下面的代码读取 string connectionString Dr
  • 在函数作用域末尾执行代码的简单方法[重复]

    这个问题在这里已经有答案了 在测试代 码中 我偶尔想设置 模拟一些全局变量 在测试 范围结束时我想恢复这些变量 例如 BOOST AUTO TEST CASE HttpClientCsrf std string csrfSave Http
  • 反序列化 PHP 会话数据

    我正在使用 CodeIgniter 3 x 和数据库会话驱动程序 我想访问data列那BLOB类型 这是我的 blob 数据 ci last regenerate i 1435420891 identity s 13 email prote
  • 匿名共享内存?

    是否有一种 POSIX y 方法来分配不与特定文件名绑定的共享内存 IE 仅通过 UNIX 域套接字传递 SCM RIGHTS 消息才能在进程之间共享内存 None
  • Asp.net 单元测试中缺少对 System.Web.Mvc 的引用?

    我最近为我的 Asp NET MVC 应用程序做了一些单元测试 或者我尝试这样做 它一直告诉我 类型 System Web Mvc Controller 是在未引用的程序集中定义的 您必须添加引用程序集 System Web Mvc 版本
  • 在 AJAX 请求期间显示微调框?

    展示旋转器的最佳方式是什么 我准备了一个 div id spinner 它在加载过程中应该是可见的 你使用 jQuery 吗 如果是这样你可以使用 ajaxStart 和 ajaxStop http docs jquery com Ajax
  • 迭代 String.prototype

    我知道for in循环可以帮助迭代对象 原型和集合的属性 事实是 我需要迭代String prototype 虽然console log String prototype 当我这样做时显示完整的原型 for var prop in Stri
  • 如何在 ASP.Net 应用程序中使用 HTTPS

    我想在 ASP NET Web 应用程序中使用 HTTPS 但仅限于 Login aspx 页面 如何才能做到这一点 首先获取或创建证书 获取 SecureWebPageModule 模块http www codeproject com A
  • Fluent nhibernate:如何映射具有类型为接口的属性的实体?

    我有一个像这样的实体 public class Employee public int ID get set public IAccountManager AccountManager get set 我还为 DefaultAccountM