nhibernate - 使用Fluent nHibernate映射到多个表

标签 nhibernate fluent-nhibernate mapping

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

电影[Movie_Id,标题,评分,..]
Actor [Actor_Id,名字,姓氏,..]
导演[Director_Id,名字,姓氏,..]

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

建议[Recommendation_Id,Object_Id,Object_Type,..]

这就是我所坚持的。如何在Fluent的nHibernate中映射这些关系?
我的意思是..映射时,我无法指定类型(与之相关的表),原因是在运行时确定的,但我不能仅依靠Id的原因,因为它本身并不意味着该表属于哪个表。
例如,想象一下“建议”表中的以下记录:
Recommendation_Id--Object_Id--Object_Type
83001--4010123 ---“M”
基本上,我存储一个char标识符(在这种情况下,“M”代表表“Movies”)以知道Object_Id属于哪个表。我不能只存储没有Object_Type的Object_Id。

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

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

最佳答案

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

  • Ayende's blog post
  • NHibernate documentation
  • Fluent NHibernate documentation

  • 我相信您要拍摄的* .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做到这一点,就像在Recommendation的映射中这样:
    ReferencesAny(x => x.RecommendedObject)
        .IdentityType<int>()
        .EntityTypeColumn("Object_Type")
        .EntityIdentifierColumn("Object_Id")
        .AddMetaValue<Movie>("M")
        .AddMetaValue<Actor>("A")
        .AddMetaValue<Director>("D");
    

    关于nhibernate - 使用Fluent nHibernate映射到多个表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8989279/

    相关文章:

    c# - 动态程序集中不支持调用的成员。

    fluent-nhibernate - Fluent NHibernate 自动映射类约定并未应用于整个类层次结构

    c# - 具有默认值的 DateTime 的 Fluent NHibernate 映射

    c# - (N)Hibernate 在查询中选择常量

    NHibernate:初始数据填充

    c# - Nhibernate LINQ - 缓存问题

    c# - 如何使用 NHibernate 通过 RESTful PUT 创建实体?

    java - 如何在 Tomcat 的 web.xml 中为欢迎文件映射过滤器?

    java - 问题: Java. util.date在 hibernate 中不允许重复的日期值

    NHibernate,一对一映射,级联插入