2010-11-15 3 views
2

J'ai la structure de base de données suivante et j'ai besoin de créer les fichiers de mappage nHibernate pertinents. Le problème que j'ai est un-un, plusieurs-un et mappings de sac. Mes données de cartographie actuelles sont également ci-dessous, toute aide est appréciée pour le comprendre.Mappage de la structure de la base de données aux fichiers de mappage 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

Je pense que vous avez les concepts mélangés. FABMatrixData doit avoir un nombre plusieurs à un pour FABType, pas un pour un. Et FABType devrait n'en avoir aucun, ou un sac inverse de FABMatrixData, pas many-to-one. –

+0

Peu pertinent, mais pourquoi ne pas utiliser Fluent NHibernate? Il serait plus facile de mapper car il est validé à la compilation. Tout ce qui précède peut être facilement mappé en utilisant FNH. Si vous avez besoin d'aide sur FNH faites le moi savoir. –

Répondre

1

Vous devez suivre les étapes suivantes:

  1. Ajouter un identifiant unique à la table FABMatrix_to_FABMatrixData.
  2. Ajoutez une ICollection de type propriété FabMatrixData à FABMatrix, objet ("FABMatrixDataSet").
  3. votre ICollection Initialiser comme dans HashedSet entrepreneur FABMatrix -

    class FABMatrix 
    {   
        public virtual ICollection<FabMatrixData> FABMatrixDataSet { get; set;} 
        public FABMatrix() 
        { 
        FABMatrixDataSet = new HashedSet<FabMatrixData>(); 
        } 
    } 
    
  4. Carte avec la cartographie Set -

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