2010-11-15 2 views
2

У меня есть следующая структура базы данных, и мне нужно создать соответствующие файлы nHibernate Mapping. Проблема, с которой я сталкиваюсь, - это одно-много, много-одно и сопоставления пакетов. Мои текущие данные сопоставления также ниже, любая помощь оценена, чтобы понять это.Сопоставление структуры БД с файлами сопоставления 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, а не много-к-одному. –

+0

Немного не имеет значения, но почему вы не используете Fluent NHibernate? Это было бы легче сопоставить, поскольку оно проверяется во время компиляции. Все перечисленное может быть легко отображено с использованием FNH. Если вам нужна помощь в FNH, дайте мне знать. –

ответ

1

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

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

    class FABMatrix 
    {   
        public virtual ICollection<FabMatrixData> FABMatrixDataSet { get; set;} 
        public FABMatrix() 
        { 
        FABMatrixDataSet = new HashedSet<FabMatrixData>(); 
        } 
    } 
    
  4. Карта его с отображением Set -

    <set name="FABMatrixDataSet" table="FABMatrix_to_FABMatrixData" cascade="none"> 
        <key column="FABMatrixId"/> 
        <many-to-many class="FABMatrixData" column="FABDataId"/> 
    </set> 
    
Смежные вопросы