0

私は委託予約ソフトウェアに取り組んでいます。委託オブジェクトの構造は次のとおりです。

public class Consignment
{
   //Other properties

   public virtual Station FromStation{get;set;}

   public virtual Station ToStation{get;set;}
}

これがステーション オブジェクトです。

public class Station
{
   public virtual int StationId{get;set;}

   public virtual string StationName{get;set;}

    //I don't want this property but I have to keep it.
    public virtual Iesi.Collections.Generic.ISet<Consginment> ConsginmentFrom
    {
        get;
        set;
    }

    //I don't want this property but I have to keep it here.
    public virtual Iesi.Collections.Generic.ISet<Consginment> ConsginmentTo
    {
        get;
        set;
    }
}

データベース側には Station テーブルがあり、Consignment テーブルには 2 つの int 列 (FromStation と ToStation と呼ばれる) があり、駅の ID を格納します。

私は NHibernate にあまり詳しくないので、半日グーグルで調べて読んだ後、次のマッピング ファイルを思いつきました。

Station.hbm.xml

<class name="Station" table="Station">
    <id name="StationId" >
      <column name="STATION_ID" not-null="true" />
      <generator class="identity" />
    </id>
    <property name="StationName" >
      <column name="STATION_NAME" not-null="true"  />
    </property>
    <set name="ConsginmentFrom" inverse="true" lazy="true" generic="true">
      <key>
        <column name="StationId" />
      </key>
      <one-to-many class="Consignment" />
    </set>
    <set name="ConsignmentTo" inverse="true" lazy="false" generic="true">
      <key>
        <column name="StationId" />
      </key>
      <one-to-many class="Consignment" />
    </set>
  </class>

委託.hbm.xml

<class name="Consignment" abstract="true"
           table="Consignment" lazy="false">
    <id name="ConsignmentId">
      <generator class="hilo"/>
    </id>

  <!--Column mapping for other properties-->

    <many-to-one name="FromStation" class="Station">
      <column name="STATION_ID" not-null="true" />
    </many-to-one>

    <many-to-one name="ToStation" class="Station">
      <column name="STATION_ID" not-null="true" />
    </many-to-one>


  </class>

しかし、上記は奇妙なDB構造を生成しています。xml で既に多くのことが書かれているので、xml マッピング ファイルを作成する必要があります。私はそれを正しくやっていますか?より良い方法はありますか?

これを読んでくれてありがとう。

4

1 に答える 1

3

マッピングで間違っていることがいくつかあります。

  1. FromStationおよびプロパティはToStation、テーブルの同じ列にマップされConsignmentます。やなどの異なる列にマップする必要がFROM_STATION_IDありTO_STATION_IDます。

    <many-to-one name="FromStation" class="Station">
      <column name="FROM_STATION_ID" not-null="true" />
    </many-to-one>
    
    <many-to-one name="ToStation" class="Station">
      <column name="TO_STATION_ID" not-null="true" />
    </many-to-one>
    
  2. SetforConsignmentFromConsignmentToinは、の代わりににStationマップされます。また、 ANDをキー列として使用する必要があります。StationIDStation_IdFROM_STATION_IDTO_STATION_ID

    <set name="ConsignmentFrom" inverse="true" lazy="true" generic="true">
      <key column="FROM_STATION_ID" />
      <one-to-many class="Consignment" />
    </set>
    
    <set name="ConsignmentTo" inverse="true" lazy="false" generic="true">
      <key colum="TO_STATION_ID" />
      <one-to-many class="Consignment" />
    </set>
    

また、委託品はいくつかの場所で綴りが間違っており、混乱を招く可能性があります.

于 2013-04-12T11:03:44.500 に答える