2010-11-15 220 views
2

我有以下數據庫結構,並且需要創建相關的nHibernate映射文件。我遇到的問題是一對一,多對一和包映射。我目前的地圖數據也在下面,任何幫助表示讚賞。將數據庫結構映射到nHibernate映射文件

alt text

FABMatrix

<?xml version="1.0" encoding="utf-8" ?> 
<hibernate-mapping xmlns="urn:nhibernate-mapping-2.2"> 
    <class name="FABMatrix" table="FABMatrix" lazy="true"> 
     <cache usage="nonstrict-read-write"/> 
     <id name="id" column="ID"> 
      <generator class="identity"/> 
     </id> 
     <property name="Name" column="ProductName"/> 
     <bag name="FABData" table="FABMatrix_to_FABMatrixData"> 
      <key column="FABMatrixId"/> 
      <many-to-many class="FABMatrixData" column="FABDataId"/> 
     </bag> 
     <property name="DateCreated" column="DateCreated"/> 
     <property name="DateModified" column="DateModified"/> 
    </class> 
</hibernate-mapping> 

FABMatrixData

<?xml version="1.0" encoding="utf-8" ?> 
<hibernate-mapping xmlns="urn:nhibernate-mapping-2.2"> 
    <class name="FabMatrixData" table="FABMatrixData" lazy="true"> 
     <cache usage="nonstrict-read-write"/> 
     <id name="id" column="ID"> 
      <generator class="identity"/> 
     </id> 
     <property name="Text" column="Text"/> 
     <one-to-one name="Type" class="FABType"></one-to-one> 
     <property name="DateCreated" column="DateCreated"/> 
     <property name="DateModified" column="DateModified"/> 
    </class> 
</hibernate-mapping> 

FABType

<?xml version="1.0" encoding="utf-8" ?> 
<hibernate-mapping xmlns="urn:nhibernate-mapping-2.2"> 
    <class name="FABType" table="FABTypes" lazy="true"> 
     <cache usage="nonstrict-read-write"/> 
     <id name="id" column="ID"> 
      <generator class="identity"/> 
     </id> 
     <property name="Name" column="Name"/> 
     <many-to-one name="Data" class="FABMatrixData" column="FABTypeId"> 
     </many-to-one> 
     <property name="DateCreated" column="DateCreated"/> 
     <property name="DateModified" column="DateModified"/> 
    </class> 
</hibernate-mapping> 
+1

我覺得你有混淆的概念。 FABMatrixData應該與FABType多對一,而不是一對一。 FABType應該沒有,或者FABMatrixData的反包,不是多對一。 – 2010-11-15 03:21:31

+0

稍微無關緊要,但爲什麼不使用Fluent NHibernate?由於它在編譯時被驗證,因此映射將更容易。以上所有內容都可以使用FNH輕鬆映射。如果您需要FNH幫助,請告訴我。 – 2011-06-16 12:27:56

回答

1

你需要做以下步驟:

  1. 添加一個唯一的ID FABMatrix_to_FABMatrixData表。
  2. 將FABMatrixData屬性的ICollection添加到FABMatrix,object(「FABMatrixDataSet」)。
  3. 初始化您的ICollection在FABMatrix承包商HashedSet - 與集映射

    class FABMatrix 
    {   
        public virtual ICollection<FabMatrixData> FABMatrixDataSet { get; set;} 
        public FABMatrix() 
        { 
        FABMatrixDataSet = new HashedSet<FabMatrixData>(); 
        } 
    } 
    
  4. 地圖吧 -

    <set name="FABMatrixDataSet" table="FABMatrix_to_FABMatrixData" cascade="none"> 
        <key column="FABMatrixId"/> 
        <many-to-many class="FABMatrixData" column="FABDataId"/> 
    </set>