使用 Fluent nHibernate 映射到多个表

2023-11-26

这是我的情况..
假设您有以下模型实体,它们各自代表单个表:

Movies[ 电影 ID、标题、评级、..]
Actors[演员 ID、名字、姓氏、..]
Director[ 导演 ID、名字、姓氏、..]

另一个实体/表称为“推荐”,它代表网站内用户之间的推荐。这个想法是推荐可以是任何类型,即有人推荐演员,或者有人推荐电影。基本上,该表应该如下所示:

建议[推荐_Id、对象_Id、对象_类型、..]

这就是我所陷入的困境。如何使用 Fluent 在 nHibernate 中映射这些关系? 我的意思是..在映射时,我无法指定类型(与哪个表相关),因为这是在运行时确定的,但我不能仅依赖于 Id ,因为它本身不能暗示属于哪个表。
例如,想象一下推荐表上的这条记录:

推荐_Id--对象_Id--对象_类型
83001--4010123---“M”

基本上,我存储一个字符标识符(在本例中“M”代表表“电影”)来了解 Object_Id 属于哪个表。我不能只存储 Object_Id 而不存储 Object_Type..

作为最后的评论,我想补充一点,我已经看到了所有每个类表、每个子类表、每个具体类表的示例,但我相信这些都不适合这种情况,因为Movies_Id、Actors_Id、Directors_Id...之间都不同,Recommendations_Id 也是如此。我的意思是,这里没有基类-子类继承,它们根本不共享 Id。

我希望我能说清楚。 提前致谢。


您正在寻找的 NHibernate 映射是<any/>。以下是一些资源,可帮助您快速了解 NHibernate 映射功能:

  • 阿延德的博客文章
  • NHibernate 文档
  • 流畅的 NHibernate 文档

我相信您正在拍摄的 *.hbm.xml 是这样的:

<class name="Recommendation" table="Recommendations">
  <id name="Id">
    <column name="Recommendation_Id" />
    <generator class="native"/>
  </id>

  <any name="RecommendedObject" id-type="System.Int32" meta-type="System.String">
    <meta-value value="M" class="Movie"/>
    <meta-value value="A" class="Actor"/>
    <meta-value value="D" class="Director"/>
    <column name="Object_Type"/>
    <column name="Object_Id"/>
  </any>

  <!-- other stuff ... -->
</class>

您应该能够使用 Fluent NHibernate 来完成此任务,就像推荐的映射中所示:

ReferencesAny(x => x.RecommendedObject)
    .IdentityType<int>()
    .EntityTypeColumn("Object_Type")
    .EntityIdentifierColumn("Object_Id")
    .AddMetaValue<Movie>("M")
    .AddMetaValue<Actor>("A")
    .AddMetaValue<Director>("D");
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用 Fluent nHibernate 映射到多个表 的相关文章

  • 是一对一的关系不好的策略

    用户始终拥有一个钱包 一个钱包始终属于一位用户 由于我想分离与钱夹相关的属性 我创建了 Wallet 对象并能够跟踪钱交易 我创建了 public Wallet Entity
  • 如何将 NHibernate 与 Lucene.Net 集成

    这变得很烦人 尝试将 Lucene Net 搜索与 NHibernate 集成 我只找到了 07 年的一些信息 有没有好看的最新这个的教程 从哪里开始 下载什么等 有没有办法在其他地方设置 NHibernate Search 元数据 而不是
  • 如何将 nartc/automapper 中的配置文件使用到 Nestjs 应用程序中

    我正在尝试在 NestJS 项目内的 nartc automapper lib 中使用 AutoMapper for nodejs 但是在尝试使用配置文件功能时遇到了麻烦 这是我的配置 应用程序模块 Module imports Autom
  • 保存时的 NHibernate FlushMode

    我已将 NHibernate 会话上的 FlushMode 属性设置为 FlushMode Never 但是当我调用 session Save User 时 无论如何都会调用数据库 这是应该如何工作的吗 我认为在我调用 Flush 之前它不
  • 如何使用 NHibernate 和 Fluent NHibernate 存储未截断的 varchar(max) 字符串

    我的数据库模式有一个 varchar max 字符串 我读过另一本问题 https stackoverflow com questions 2343105 override for fluent nhibernate for long te
  • 延迟阴影映射 GLSL

    我目前正在实施延迟渲染管道 但我仍坚持使用阴影贴图 我已经成功地将其实施到前向管道中 我所做的步骤是 获取灯光视图中的位置 转换为光视图剪辑空间 使用 0 5 0 5 获取阴影纹理坐标 检查深度 编辑 使用新结果图像更新代码 float c
  • 如何在 JSON 中查找特定值并在 JavaScript 中显示这些值中的最小值?

    我是 JS 新手 正在尝试完成一项任务 但没有找到确切的解决方案 这是我第一次发帖 有什么不对的地方请大家指正 这是我的问题 这是我的 JSON 文件的一小部分 该文件有 3000 多行 我已经给出了同一 JSON 文件的确切格式 stat
  • 最好的 NHibernate 二级缓存提供程序是什么?

    我见过有很多这样的 NCache Velocity 等等 但我还没有找到比较它们的表格 考虑以下标准什么是最好的 容易明白 最近正在维护中 是免费的或者有足够好的免费版本 Works 我无法说出什么是最好的或最差的 但我会分享我使用 NCa
  • MSTest 和 NHibernate

    有谁有让 MSTest 将 hibernate cfg xml 正确复制到输出目录的经验吗 我的所有 MSTest 都因找不到 hibernate cfg xml 错误而失败 我将其设置为 始终复制 但我的 MBUnit 测试通过了 您可以
  • NHibernate 将多个表映射到一个类

    在我的旧数据库中 我遇到这样的情况 TableA id A PK cod A TableB id B PK cod B id A FK TableC id C PK cod C id B FK 由于多种原因 我需要将这些表映射到单个类中 本
  • NHibernate:无状态会话错误消息无法获取代理

    我正在使用 nHibernate 无状态会话来获取对象 更新一个属性并将对象保存回数据库 我不断收到错误消息 无状态会话无法获取代理 我在其他地方有类似的代码 所以我不明白为什么这不起作用 有谁知道问题可能是什么 我正在尝试更新Screen
  • 如何在 nHibernate 中添加 NOLOCK?

    使用nhibernate时如何添加NOLOCK 条件查询 SetLockMode LockMode None http nhforge org doc nh en index html configuration optional dial
  • 有什么方法可以在地图上绘制多个条形图吗?

    我正在尝试在地图上绘制多个条形图 并且只是在寻找一个起点 我已经看过几个问题了 如下所示 地图上的条形图 https stackoverflow com questions 20465070 barplots on a map 使用ggpl
  • 映射枚举列表

    我有一个名为 UserPermissions 的表 其中通过 userId 与用户表进行 FK 然后是一个用于枚举字符串值的字符串列 我看到的错误是 NHibernate MappingException 表 UserPermissions
  • NHibernate双向一对一映射问题

    当尝试在 NHibernate 中创建双向一对一映射时 我发现我无法递归地获得对象的引用 例如 假设我之间有一对一的关系Person and Address 然后执行以下代码后 class Person public Address Add
  • NHibernate 二级缓存与 NHibernate Linq Provider 1.0

    如何使用 NHibernate Linq Provider 1 0 启用 NHibernate 二级缓存 二级缓存似乎仅适用于 ICriteria 使用 是的 我终于解决了这个问题 public IQuerable
  • Fluent NHibernate 中的 NHibernate 配置属性

    我正在考虑在我的项目中使用 Fluent NHibernate 但我还没有找到任何关于 FH 是否支持 NHibernate 设置 例如 show sql 和prepare sql 的文档 我可以在紧要关头没有 show sql 生活 但p
  • ASP.NET MVC 应用程序中的工作单元模式

    我一直在看这个优秀的blog http www nhforge org wikis patternsandpractices nhibernate and the unit of work pattern aspx标题为 NHibernat
  • 在 nHibernate 关系中使用实体的 Lite 版本?

    在某些情况下 出于性能原因 创建一个实体的轻量级版本 指向同一个表 但映射的列较少 这是一个好主意吗 例如 如果我有一个包含 50 列的联系人表 并且在一些相关实体中 我可能对 FirstName 和 LastName 属性感兴趣 那么创建
  • 如何在 NHibernate 命名查询参数上设置 C# 可为空值类型值?

    我正在使用 NHibernate 并通过命名查询调用存储过程

随机推荐