NHibernate与XRef表的单向关联

时间:2011-05-31 16:40:39

标签: nhibernate

我试图获得我想要正确持久的映射。对于我的例子,我有一个ItemY类,它可以有0,1,*资产。但是,资产可以属于ItemY或ItemZ对象。我正在尝试使用交叉引用表来存储它。

模式

TABLE [dbo].[ItemY](
    [ItemYID] [int] IDENTITY(1,1) NOT NULL,
    --more columns here

TABLE [dbo].[Asset](
    [AssetID] [uniqueidentifier] NOT NULL,
    [AssetTypeID] [int] NOT NULL,
    [DisplayOrder] [int] NOT NULL,
    [Location] [varchar](255) NOT NULL,

TABLE [dbo].[ItemYAsset](
    [ItemYID] [int] NOT NULL,
    [AssetID] [uniqueidentifier] NOT NULL,

映射:

<hibernate-mapping xmlns="urn:nhibernate-mapping-2.2" assembly="MyAssembly" namespace="My.Namespace">
<class name="ItemY" table="ItemY">
    <id name="ItemYId" column="ItemYID">
        <generator class="identity" />
    </id>
    <bag name="Images" table="ItemYAsset" inverse="true" cascade="all-delete-orphan">
        <key column="ItemYID" not-null="true" />
        <many-to-many class="Asset" column="AssetID" unique="true" />
    </bag>
    <!--more mapping here-->
</class>

<hibernate-mapping xmlns="urn:nhibernate-mapping-2.2" assembly="MyAssembly" namespace="My.Namespace">
    <class name="Asset" table="Asset">
        <id name="AssetId" column="AssetID">
            <generator class="guid.comb" />
        </id>
        <property name="DisplayOrder"></property>
        <property name="Location"></property>
    </class>
</hibernate-mapping>

我不想在Asset上公开ItemY属性,因为Asset并不总是属于ItemY。我的ItemY类保持不变,并且还持久保存Asset类,但没有任何内容添加到关联表(ItemYAsset)。知道我做错了吗?

1 个答案:

答案 0 :(得分:2)

inverse="true"意味着“另一方”负责维持这种关系。

由于您没有“其他方面”(关系是单向的),请删除该属性。