如何使用nHibernate映射n列主键

Ela*_*nda 5 .net nhibernate fluent-nhibernate composite-primary-key

我有一个2列的表作为PK(复合主键).

如何将它们映射到"Id" hbm.xml

<id name="A" />  
Run Code Online (Sandbox Code Playgroud)

如何用流利的nhibernate做到这一点?

Ger*_*ard 12

NHibernate文档描述了如何使用和映射复合ID.

您还可以将组件用作compositeid.

对于Fluent NHibernate:

public class ClassNameMap: ClassMap<ClassName>
{
    public ClassNameMap()
    {
        CompositeId().
            .KeyReference(x => x.A, "A")
            .KeyReference(x => x.B, "B");
    }
}
Run Code Online (Sandbox Code Playgroud)


mmg*_*666 5

对于 nHibernate 中的复合主键,我建议;

对于 hbm.xml:

<hibernate-mapping>   
<class table="TableName" name="Namespace.ClassName, ClassName">
<composite-id>
    <key-property name="IdPropertyOne" column="ColumnOne" />
    <key-property name="IdPropertyTwo" column="ColumnTwo" />
</composite-id>
<property name="PropertyName" column="ColumnName" type="String"></property>
</class>
</hibernate-mapping>
Run Code Online (Sandbox Code Playgroud)

然后你应该覆盖EqualsGetHashCode方法,以便 nHibernate 知道如何比较你的新键并识别不同的对象。这取决于您愿意走多远,您也可以使用“键多对一”将外键映射到这些上。

对于多对一键:

<key-many-to-one name="PropertyOneObjName" column="ColumnOne" class="PropertyOneClassName">
Run Code Online (Sandbox Code Playgroud)

对于流畅的休眠,复合键如下所示:

public ClassName(){
    CompositeId().
        KeyProperty(x => x.IdPropertyOne,"ColumnOne")
        KeyProperty(x => x.IdPropertyTwo,"ColumnTwo")
}
Run Code Online (Sandbox Code Playgroud)