gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-04 06:07:43 26 4
gpt4 key购买 nike

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

电影[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/

    26 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com