Entity-Framework:複合キーを定義する

samatsu 7/10/2015 9944 N/A Code First

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; } 
}