我有一個數據庫共享列的關係。這裏是精簡表結構流利NHibernate的關係,共享列
Order
----------
OrderId int IDENTITY
OrderLine
----------
OrderId int NOT NULL
OrderLine int NOT NULL
OrderNote
----------
NoteId uniqueidentifier NOT NULL
OrderId int NOT NULL
OrderLineId int NULL
基本上Order Order和OrderLine之間共享OrderNote表。如果OrderLineId列爲空,則該筆記屬於該訂單。如果OrderLineId列存在,則說明屬於訂單行。以下是我的課程的樣子:
class Order {
int OrderId {get; set;}
IList<OrderLine> Lines {get;}
IList<OrderNote> Notes {get;}
}
class OrderLine {
int OrderLineId {get; set;}
Order Order {get; set;}
IList<OrderNote> Notes {get;}
}
class OrderNote {
Order Order {get; set;}
OrderLine Line {get; set;}
Guid NoteId {get; set;}
}
如果OrderNote.Line爲空,則說明僅屬於訂單。如果OrderNote.Line不爲null,則說明屬於訂單和行。這裏是我的映射是這樣的:
class OrderClassMap {
Id(x => x.OrderId).Generated.Identity();
HasMany(x => x.Lines).Inverse().KeyColumn("OrderId");
HasMany(x => x.Notes).Inverse().KeyColumn("OrderId");
}
class OrderLineClassMap {
CompositeId().KeyReference(x => x.Order, "OrderId").KeyProperty(x => x.OrderLineId);
HasMany(x => x.Notes).Inverse().KeyColumns.Add("OrderId", "OrderLineId");
}
class OrderNoteClassMap {
Id(x => x.NoteId).Generated.Assigned();
References(x => x.Order).Column("OrderId");
References(x => x.Line).Columns("OrderId", "OrderLineId");
}
當我嘗試保存新OrderNote,我得到一個錯誤說「無效的指數11本SqlParameterCollection以計數= 11我如何正確模擬和地圖這個?
需要有每筆訂單和訂單行多個音符。這樣設計的原因在於,Order實際上包含了所有的筆記對象,甚至包含了屬於這些筆劃的筆記對象。所以要清楚。有沒有辦法在NHibernate中共享這樣的列? – awilinsk
它看起來像NHibernate沒有辦法解決這個問題。我希望這是因爲OrderLine和OrderNote使用的組合鍵有一個引用返回OrderId,我不必創建一個重複的列。我最終爲OrderLine引用創建了一個重複的列。 – awilinsk