将数据库结构映射到nHibernate映射文件

将数据库结构映射到nHibernate映射文件,nhibernate,nhibernate-mapping,Nhibernate,Nhibernate Mapping,我有下面的DB结构,我需要创建相关的nHibernate映射文件。我遇到的问题是一对一、多对一和多对包映射。我目前的地图数据也在下面,如果有任何帮助,我们将不胜感激 FABMatrix <?xml version="1.0" encoding="utf-8" ?> <hibernate-mapping xmlns="urn:nhibernate-mapping-2.2"> <class name="FABMatrix" table="FABMatrix"

我有下面的DB结构,我需要创建相关的nHibernate映射文件。我遇到的问题是一对一、多对一和多对包映射。我目前的地图数据也在下面,如果有任何帮助,我们将不胜感激

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>

您需要执行以下步骤:

  • 将唯一ID添加到FABMatrix\u到\u FABMatrix扩展数据表
  • 将FabMatrixData属性类型的ICollection添加到FABMatrix对象(“FABMatrixDataSet”)
  • 将ICollection初始化为FABMatrix contractor中的哈希集-

    class FABMatrix
    {        
      public virtual ICollection<FabMatrixData> FABMatrixDataSet { get; set;}
      public FABMatrix()
      {
         FABMatrixDataSet = new HashedSet<FabMatrixData>();
      }
    }
    
    class矩阵
    {        
    公共虚拟ICollection FABMatrixDataSet{get;set;}
    公共矩阵()
    {
    FABMatrixDataSet=新HashedSet();
    }
    }
    
  • 用集合映射映射它-

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

  • 我想你把概念搞混了。FABMatrixData应具有多对一对FABType,而不是一对一。FABType应该没有,或者是一个相反的FABMatrixData包,不是多对一的。有点不相关,但是为什么不使用Fluent NHibernate呢?映射会更容易,因为它是在编译时验证的。使用FNH可以轻松映射上述所有内容。如果你需要FNH的帮助,请告诉我。