Отображение структуры БД в файлы отображения nHibernate - PullRequest
2 голосов
/ 15 ноября 2010

У меня есть следующая структура БД, и мне нужно создать соответствующие файлы nHibernate Mapping. Проблема, с которой я сталкиваюсь, - это сопоставления «один-один-много-один» и «сумка». Мои текущие картографические данные также ниже, любая помощь оценена, чтобы понять это.

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 Ответ

1 голос
/ 20 ноября 2011

Вам необходимо выполнить следующие шаги:

  1. Добавление уникального идентификатора в таблицу FABMatrix_to_FABMatrixData.
  2. Добавить ICollection типа FabMatrixData свойство в FABMatrix, объект ("FABMatrixDataSet").
  3. Инициализируйте ICollection как HashedSet в FABMatrix подрядчике -

    class FABMatrix
    {        
      public virtual ICollection<FabMatrixData> FABMatrixDataSet { get; set;}
      public FABMatrix()
      {
         FABMatrixDataSet = new HashedSet<FabMatrixData>();
      }
    }
    
  4. Отобразить его с помощью Set mapping -

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