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; } }
さんのコメント: さんのコメント: