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:如何映射具有类型为接口的属性的实体? 的相关文章

  • 没有强命名的代码签名是否会让您的应用程序容易被滥用?

    尝试了解authenticode代码签名和强命名 我是否正确地认为 如果我对引用一些 dll 非强命名 的 exe 进行代码签名 恶意用户就可以替换我的 DLL 并以看似由我签名但正在运行的方式分发应用程序他们的代码 假设这是真的 那么您似
  • ASP.NET MVC:这个业务逻辑应该放在哪里?

    我正在开发我的第一个真正的 MVC 应用程序 并尝试遵循一般的 OOP 最佳实践 我正在将控制器中的一些简单业务逻辑重构到我的域模型中 我最近一直在阅读一些内容 很明显我应该将逻辑放在域模型实体类中的某个位置 以避免出现 贫血域模型 反模式
  • 为什么当实例化新的游戏对象时,它没有向它们添加标签? [复制]

    这个问题在这里已经有答案了 using System Collections using System Collections Generic using UnityEngine public class Test MonoBehaviou
  • 嵌套接口:将 IDictionary> 转换为 IDictionary>?

    我认为投射一个相当简单IDictionary
  • 使用实体框架模型输入安全密钥

    这是我今天的完美想法 Entity Framework 中的强类型 ID 动机 比较 ModelTypeA ID 和 ModelTypeB ID 总是 至少几乎 错误 为什么编译时不处理它 如果您使用每个请求示例 DbContext 那么很
  • BitTorrent 追踪器宣布问题

    我花了一点业余时间编写 BitTorrent 客户端 主要是出于好奇 但部分是出于提高我的 C 技能的愿望 我一直在使用理论维基 http wiki theory org BitTorrentSpecification作为我的向导 我已经建
  • 如何使用 ICU 解析汉字数字字符?

    我正在编写一个使用 ICU 来解析由汉字数字字符组成的 Unicode 字符串的函数 并希望返回该字符串的整数值 五 gt 5 三十一 gt 31 五千九百七十二 gt 5972 我将区域设置设置为 Locale getJapan 并使用
  • HTTPWebResponse 响应字符串被截断

    应用程序正在与 REST 服务通信 Fiddler 显示作为 Apps 响应传入的完整良好 XML 响应 该应用程序位于法属波利尼西亚 在新西兰也有一个相同的副本 因此主要嫌疑人似乎在编码 但我们已经检查过 但空手而归 查看流读取器的输出字
  • 如何从 appsettings.json 文件中的对象数组读取值

    我的 appsettings json 文件 StudentBirthdays Anne 01 11 2000 Peter 29 07 2001 Jane 15 10 2001 John Not Mentioned 我有一个单独的配置类 p
  • 在 ASP.NET 5 中使用 DI 调用构造函数时解决依赖关系

    Web 上似乎充斥着如何在 ASP NET 5 中使用 DI 的示例 但没有一个示例显示如何调用构造函数并解决依赖关系 以下只是众多案例之一 http social technet microsoft com wiki contents a
  • 重载<<的返回值

    include
  • 如何设计以 char* 指针作为类成员变量的类?

    首先我想介绍一下我的情况 我写了一些类 将 char 指针作为私有类成员 而且这个项目有 GUI 所以当单击按钮时 某些函数可能会执行多次 这些类是设计的单班在项目中 但是其中的某些函数可以执行多次 然后我发现我的项目存在内存泄漏 所以我想
  • 垃圾收集器是否在单独的进程中运行?

    垃圾收集器是否在单独的进程中启动 例如 如果我们尝试测量某段代码所花费的进程时间 并且在此期间垃圾收集器开始收集 它会在新进程上启动还是在同一进程中启动 它的工作原理如下吗 Code Process 1 gt Garbage Collect
  • Windows 窗体:如果文本太长,请添加新行到标签

    我正在使用 C 有时 从网络服务返回的文本 我在标签中显示 太长 并且会在表单边缘被截断 如果标签不适合表单 是否有一种简单的方法可以在标签中添加换行符 Thanks 如果您将标签设置为autosize 它会随着您输入的任何文本自动增长 为
  • WPF/C# 将自定义对象列表数据绑定到列表框?

    我在将自定义对象列表的数据绑定到ListBox in WPF 这是自定义对象 public class FileItem public string Name get set public string Path get set 这是列表
  • 通过指向其基址的指针删除 POD 对象是否安全?

    事实上 我正在考虑那些微不足道的可破坏物体 而不仅仅是POD http en wikipedia org wiki Plain old data structure 我不确定 POD 是否可以有基类 当我读到这个解释时is triviall
  • cmake 将标头包含到每个源文件中

    其实我有一个简单的问题 但找不到答案 也许你可以给我指一个副本 所以 问题是 是否可以告诉 cmake 指示编译器在每个源文件的开头自动包含一些头文件 这样就不需要放置 include foo h 了 谢谢 CMake 没有针对此特定用例的
  • C++ 标准是否指定了编译器的 STL 实现细节?

    在写答案时this https stackoverflow com questions 30909296 can you put a pimpl class inside a vector我遇到了一个有趣的情况 这个问题演示了这样一种情况
  • 如何防止用户控件表单在 C# 中处理键盘输入(箭头键)

    我的用户控件包含其他可以选择的控件 我想实现使用箭头键导航子控件的方法 问题是家长控制拦截箭头键并使用它来滚动其视图什么是我想避免的事情 我想自己解决控制内容的导航问题 我如何控制由箭头键引起的标准行为 提前致谢 MTH 这通常是通过重写
  • 对来自流读取器的过滤数据执行小计

    编辑问题未得到解答 我有一个基于 1 个标准的过滤输出 前 3 个数字是 110 210 或 310 给出 3 个不同的组 从流阅读器控制台 问题已编辑 因为第一个答案是我给出的具体示例的字面解决方案 我使用的实际字符串长度为 450 个

随机推荐

  • 如何给 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