web-dev-qa-db-ja.com

Entity Framework Code Firstを使用して一意の制約を設定することは可能ですか?

テーブルに一意の制約を適用したいのですが、Entity Framework Code-Firstを使用しています。

以前のバージョンでは不可能だったと考えているため、EF 6を使用して一意の制約を追加することは可能ですか?.

37

バージョン6でリリースする予定だった 一意の制約機能 は6.1にプッシュされたようです。

EF 6.1では、次のようにIndex属性を使用して制約を定義できます。

[Index("IX_FirstAndSecond", 1, IsUnique = true)]
public int FirstColumn { get; set; }

[Index("IX_FirstAndSecond", 2, IsUnique = true)]
public int SecondColumn { get; set; }

OR

[〜#〜] msdn [〜#〜] に示すように、Fluent APIを使用できます。

51
SBirthare

一意の制約を1つの属性のみに追加するとします。EF6.1以降、次のようにできます。

[Index(IsUnique = true)]
public string Username { get; set; }

同じインデックスに関連する複数のフィールドがある場合は、次を使用します:

複数列インデックス

複数の列にまたがるインデックスは、特定のテーブルの複数のインデックスアノテーションで同じ名前を使用して指定されます。複数列のインデックスを作成する場合、インデックス内の列の順序を指定する必要があります。たとえば、次のコードは、IX_BlogAndRatingという名前のRatingおよびBlogIdに複数列のインデックスを作成します。 BlogIdはインデックスの最初の列で、評価は2番目の列です。

public class Post 
{ 
    public int Id { get; set; } 
    public string Title { get; set; } 
    public string Content { get; set; } 
    [Index("IX_BlogIdAndRating", 2)] 
    public int Rating { get; set; } 
    [Index("IX_BlogIdAndRating", 1)] 
    public int BlogId { get; set; } 
}

詳細については、 このリンク を参照してください。

21
Hassen Ch.