Code First は複合キーに対応しています。
複合キーを定義する
InvoiceItemというサンプルエンティティクラスに、複合キーを定義するサンプルを記載します。複合キーはキーとなるプロパティに KeyAttribute を設定します。さらに、複合キーの各フィールドに ColumnAttribute を付与し、 Order プロパティにキーの順番を指定します。
public class Invoice
{
[Key]
public string InvoiceCode { get; set; }
public string Name { get; set; }
public virtual ICollection<InvoiceItem> InvoiceItems { get; set; }
}
public class InvoiceItem
{
[ForeignKey("Invoice")]
[Key, Column(Order = 2)]
public string InvoiceCode { get; set; }
[Key, Column(Order = 1)]
public int ItemNo { get; set; }
public string ProductName { get; set; }
public decimal Price { get; set; }
public virtual Invoice Invoice { get; set; }
public virtual ICollection<TestOrder> TestOrders { get; set; }
}
複合キーを外部キーとして参照する
上記サンプルで使用した InvoiceItem の参照を持つエンティティクラスを定義します。外部キーの指定は ForeignKeyAttribute を使用して指定します。複合キーを定義した場合と同様にOrderプロパティに順番を指定したColumnAttribute で外部キーを修飾します。
public class TestOrder
{
[Key]
public int TestOrderId { get; set; }
public string Description { get; set; }
[ForeignKey("InvoiceItem")]
[Column(Order=2)]
public string InvoiceCode { get; set; }
[ForeignKey("InvoiceItem")]
[Column(Order = 1)]
public int ItemNo { get; set; }
public virtual InvoiceItem InvoiceItem { get; set; }
}
さんのコメント: さんのコメント: