我有一个共享关系列的数据库。这是精简的表结构
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
基本上,OrderNote 表在 Order 和 OrderLine 之间共享。如果 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 不为空,则注释属于订单和行。这是我的映射的样子:
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 时,我收到一条错误消息:“此 SqlParameterCollection 的索引 11 无效,Count=11。如何正确建模和映射它?