0

私はこの状況に混乱しています。これらの2つのクラスを持つ:

public class TxType {
    public TxType()
    {
        Payments = new List<Payment>();
    }
    public string TxTypeId { get; set; }
    public string TxCode { get; set; }
    public IList<Payment> Payments { get; set; }
    public string Description { get; set; } }

public class Payment {
    public Payment() { }
    public  string Trn { get; set; }
    public  TxType TxTypeId { get; set; }
    public  string TxCode { get; set; }        
    public  System.Nullable<decimal> Amount { get; set; }
    public  System.Nullable<System.DateTime> DateStamp { get; set; } }

TxType テーブルには 2 つの PK (TxTypeId、TxCode) があり、どちらも Payment テーブルの FK です。これらは私のマッピングです:

  <class name="TxType" table="TxType" lazy="false" >
    <composite-id>
      <key-property name="TxTypeId" column="TxTypeId" />
      <key-property name="TxCode" column="TxCode" />
    </composite-id>
    <property name="Description">
      <column name="Description" sql-type="nvarchar" not-null="false" />
    </property>
    <bag name="Payments" inverse="true" cascade="none">
      <key>
        <column name="TxTypeId" />
        <column name="TxCode" />
      </key>      
      <one-to-many class="MyProject.Nhibernate.Repository.Payment" not-found="ignore" />
    </bag>
  </class>

  <class name="Payment" table="Payment" lazy="false" >
    <id name="Trn">
      <generator class="identity" />
    </id>
    <many-to-one insert="false" update="false" lazy="false" name="TxTypeId">
      <column name="TxTypeId" sql-type="varchar" not-null="false" />
    </many-to-one>
    <property name="TxTypeId">
      <column name="TxTypeId" sql-type="varchar" not-null="false" />
    </property>
    <many-to-one insert="false" update="false" lazy="false" name="TxCode">
      <column name="TxCode" sql-type="varchar" not-null="false" />
    </many-to-one>
    <property name="TxCode">
      <column name="TxCode" sql-type="varchar" not-null="false" />
    </property>
    <property name="Amount">
      <column name="Amount" sql-type="decimal" not-null="false" />
    </property>
    <property name="DateStamp">
      <column name="DateStamp" sql-type="datetime" not-null="false" />
    </property>    
  </class>

そして、私はこのエラーで立ち往生しています: 外部キー (FKF4FA0208CDBA724F:Payment [TxTypeId])) には、参照された主キー (TxType [TxTypeId, TxCode]) と同じ数の列が必要です。

ありがとう!

さて、支払いマッピングに次の行を追加することでわかりました。

<many-to-one name="TxType" class="MyProject.Nhibernate.Repository.TxType" insert="false" update="false" lazy="false" >
  <column name="TxTypeId" sql-type="varchar" not-null="false" />
  <column name="TxCode" sql-type="varchar" not-null="false" />
</many-to-one>

ありがとう!

4

1 に答える 1

1

id プロパティは 1 つだけである必要があります。つまり、テーブルに複合主キーがある場合、これらの列にマッピングするためのクラスを作成する必要があります。Get/Load メソッドは id のパラメーターを 1 つだけ受け取り、多くはないことに注意してください。

于 2012-06-28T09:34:52.080 に答える