gpt4 book ai didi

c# - NHibernate 映射与中间表的一对一关系

转载 作者:太空宇宙 更新时间:2023-11-03 13:48:49 26 4
gpt4 key购买 nike

给定表格:

TableA
aId
...

TableB
bId
...

TableC
aId
cId // Maps to TableB.bId

换句话说,TableA 和 TableB 仅通过 TableC 中的条目相关。

我想要以下类(class):

public class ClassA
{
aId
...
}

public class ClassB
{
bId
...
}

public class ClassD : ClassA
{
ClassB
}

因此 ClassD 具有 ClassA 的所有属性,并添加了 ClassB 的单个实例。

我最初的想法是使用:

<?xml version="1.0" encoding="utf-8"?>
<hibernate-mapping auto-import="false" xmlns="urn:nhibernate-mapping-2.2">
<class name="ClassD" lazy="false" table="TableA" polymorphism="explicit">
<id name="aId" column="aId" type="Guid">
<generator class="CustomGuidGenerator" />
</id>
...
<many-to-one name="ClassB" column="cId" class="ClassB" cascade="all" not-found="ignore" />
</class>
</hibernate-mapping>

很明显,在这个映射中,TableA中没有cId,也没有多对一的方式来指定一个表。那么,如何通过中间连接表映射单个实体?

最佳答案

不确定您的表中到底有什么(TableC.aId 是对 TableA.aId 的引用吗?),但也许您可以采用一个子类一个表的策略(参见示例 http://docs.huihoo.com/hibernate/nhibernate-reference-1.2.0/inheritance.html)

<class name="ClassA" table="TableA">
<id name="aId" column="aId" type="Guid">
<generator class="CustomGuidGenerator" />
</id>
<joined-subclass name="ClassD" table="TableC">
<key column="aId"/>
<many-to-one name="ClassB" column="cId" class="ClassB" cascade="all" not-found="ignore" />
</joined-subclass>
</class>

关于ClassB,它应该有自己的映射文件,系统可以为多对一的ClassB计算表名(TableB)属性(property)。

关于c# - NHibernate 映射与中间表的一对一关系,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14362561/

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