我嘗試將NHibernate映射到現有的數據庫結構。不幸的是我無法改變現有結構。當NH保存子集合時,外鍵爲空
首先,我將提供一些背景,然後解釋這個問題本身
關係的分析很簡單:
登錄的主要實體。他與表格有一對一的關係。 外鍵是FormID。
買方&賣方是表單實體的集合。 應用程序應將表單實體與買方和賣方一起保存。
問題是由買方&賣方實體組成的主鍵。 從ForegineKey- 關鍵複合FormID和intenal排序INT號 - tdNum
這反映在以下形式FNH映射
public class FormLogMap : ClassMap<FormLog>
{
public FormLogMap()
{
Table("BillOfSaleLog");
Id(x => x.FormId).Column("FormID").GeneratedBy.Native();
....
....
References<Form>(x => x.Form, "FormID").LazyLoad().ReadOnly();
}
}
public class FormMap : ClassMap<Form>
{
public FormMap()
{
Table("BillOfSaleForm");
Id(x => x.Id).Column("FormID").GeneratedBy.Foreign("Log");
...
...
HasOne<FormLog>(x => x.Log).Cascade.All();
HasMany(x => x.Buyers).KeyColumn("FormID").Inverse().Cascade.All();
HasMany(x => x.Sellers).KeyColumn("FormID").Inverse().Cascade.All();
}
}
public class BuyerMap : ClassMap<Buyer>
{
public BuyerMap()
{
Table("BillOfSaleBuyer");
CompositeId()
.KeyReference(x => x.Form, "FormID")
.KeyProperty(x => x.InnerOrderId, "tdNum1");
....
....
}
}
Seller is exectly the same
當我試圖保存時發生該問題實體的編輯動作 我正在使用MVC獲取用戶數據並使其成爲一個對象。 綁定工作正常,並使對象與集合。
但是當我保存收到以下錯誤的實體:
我期望NHibernate的足夠聰明來設置買方賣方&外鍵。但實際上它們仍然沒有價值。
這個問題可以通過手動設置外鍵 如下面的代碼來解決:
//i have to set the form proerty in the childs
//without of the lines NH will try to save the childs it with FormID = null
foreach (var buyer in form.Buyers) { buyer.Form = form; }
foreach (var seller in form.Sellers) { seller.Form = form; }
但是我正在尋找一個優雅的和正確的解決方案
感謝您閱讀
謝謝您的重播。我理解建議的解決方案,但它需要更改表格模式。 我會採取我上面提出的解決方案。 可以理解的是,映射笨拙的關係結構的能力是有問題的 – ari 2010-10-21 09:13:01