我使用NHibernate 3.3與FluentNHibernate 1.3。nhibernate外鍵必須與引用主鍵具有相同的列數
我的數據庫有兩個表:InvoiceHeader和InvoiceDetail。標題具有兩列的組合鍵。詳細信息具有單列主鍵。問題是細節沒有組合鍵的兩個部分;它只有一部分。沒有外鍵約束存在。
public class TInvoiceHeader
{
public virtual TInvoiceHeaderIdentifier Identifier { get; set; }
public virtual long Dwinvoiceid { get; set; }
public virtual int InvTimeID { get; set; }
public virtual IList<TInvoiceDetail> Details { get; set; }
....
}
public class TInvoiceHeaderIdentifier
{
public virtual long Dwinvoiceid { get; set; }
public virtual int InvTimeID { get; set; }
....
}
public TInvoiceHeaderMap()
{
CompositeId<TInvoiceHeaderIdentifier>(x => x.Identifier)
.KeyProperty(x => x.Dwinvoiceid, "DWInvoiceID")
.KeyProperty(x => x.InvTimeID, "InvTimeID");
HasMany<TInvoiceDetail>(x => x.Details).KeyColumn("DWInvoiceID");
....
}
public class TInvoiceDetail
{
public virtual TInvoiceHeader Header { get; set; }
public virtual long Dwinvoicedetailid { get; set; }
public virtual long Dwinvoiceid { get; set; }
....
}
public TInvoiceDetailMap()
{
Table("tInvoiceDetail");
LazyLoad();
Id(x => x.Dwinvoicedetailid).GeneratedBy.Identity().Column("DWInvoiceDetailId");
References<TInvoiceHeader>(x => x.Dwinvoiceid);
....
}
我不知道如何使這項工作,因爲細節行沒有InvTimeID鍵。我越來越:
NHibernate.Cfg.Configuration - 外鍵(FKAD4039AB666D3F7:tInvoiceDetail [DWInvoiceID]))必須具有相同的號碼作爲參照的主鍵(tInvoiceHeader [DWInvoiceID,InvTimeID]) NHibernate的列。 FKUnmatchingColumnsException:外鍵(FKAD4039AB666D3F7:tInvoiceDetail [DWInvoiceID]))必須與引用的主鍵(tInvoiceHeader [DWInvoiceID,InvTimeID])具有相同數量的列NHibernate.Mapping .ForeignKey.AlignColumns() at NHibernate.Cfg.Configuration.SecondPassCompileForeignKeys(Table table,ISet done) NHibernate.Cfg.Configuration - Foreig n鍵(FKAD4039AB666D3F7:tInvoiceDetail [DWInvoiceID]))必須與引用的主鍵具有相同的列數(tInvoiceHeader [DWInvoiceID,InvTimeID]) NHibernate.FKUnmatchingColumnsException:外鍵(FKAD4039AB666D3F7:tInvoiceDetail [DWInvoiceID]))必須具有相同的數字作爲引用的主鍵(tInvoiceHeader [DWInvoiceID,InvTimeID]) 在NHibernate.Mapping.ForeignKey.AlignColumns(表referencedTable) 在NHibernate.Mapping.ForeignKey.AlignColumns() 在NHibernate.Cfg.Configuration.SecondPassCompileForeignKeys(列表的表,ISet完成)
可以工作嗎?我的查詢將始終從頭到尾,而不是相反。我無法修改表格。
如果兩張發票可以有相同的發票編號,這怎麼可能工作?不只是與NHibernate,但在所有? – hvd 2013-02-28 19:44:17
標題有一個組合鍵。詳細信息行有其自己的密鑰。兩個標頭可以具有相同的DWInvoiceID,但它們必須具有不同的InvTimeID。 – Amy 2013-02-28 19:47:02
什麼hvd說。當父表具有複合主鍵並且子表缺少組成該鍵的一個或多個列時,無法在兩個表之間建立聲明性fk關係。重構InvoiceHeader表。 – Tim 2013-02-28 19:56:04