2012-06-24 75 views
0

我對這種情況感到困惑。有這兩個類別:Nhibernate:外鍵必須與引用的主鍵具有相同的列數

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表有兩個PK(TxTypeId,TxCode),並且都在付款表中都是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:付款[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> 

謝謝!

+0

不axactly一個問題的答案,但如果你設置'<包名稱=「付款」逆=「真」>'和'<多到一個名稱=「TxType」插入=「假「update =」false「>'您無法向交易添加任何付款 – Firo

回答

1

您的id屬性必須只有一個。也就是說,如果你的表有一個複合主鍵,你應該創建一個映射到這些列的類。請記住,Get/Load方法僅爲id使用單個參數,並不是很多。

相關問題