関係の列を共有するデータベースがあります。これが要約テーブル構造です
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列がnullの場合、メモは注文に属します。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がnullの場合、メモはOrderにのみ属します。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を保存しようとすると、「Count = 11のこのSqlParameterCollectionのインデックス11が無効です。これを正しくモデル化してマップするにはどうすればよいですか?」というエラーが表示されます。