190

EntityTypeConfigurationCode First と流暢な API を使用して EF エンティティを構築しようとしています。主キーの作成は簡単ですが、Unique Constraint ではそうではありません。このためにネイティブ SQL コマンドを実行することを提案する古い投稿を見ていましたが、それは目的に反しているようです。これはEF6で可能ですか?

4

6 に答える 6

18

一意のインデックスをより流暢に設定するための拡張メソッドを次に示します。

public static class MappingExtensions
{
    public static PrimitivePropertyConfiguration IsUnique(this PrimitivePropertyConfiguration configuration)
    {
        return configuration.HasColumnAnnotation("Index", new IndexAnnotation(new IndexAttribute { IsUnique = true }));
    }
}

使用法:

modelBuilder 
    .Entity<Person>() 
    .Property(t => t.Name)
    .IsUnique();

次のような移行が生成されます。

public partial class Add_unique_index : DbMigration
{
    public override void Up()
    {
        CreateIndex("dbo.Person", "Name", unique: true);
    }

    public override void Down()
    {
        DropIndex("dbo.Person", new[] { "Name" });
    }
}

Src: Entity Framework 6.1 fluent API を使用した一意のインデックスの作成

于 2016-07-17T07:02:03.283 に答える
16

@ coni2k の答えは正しいですが[StringLength]、それを機能させるには属性を追加する必要があります。そうしないと、無効なキー例外が発生します(以下の例)。

[StringLength(65)]
[Index("IX_FirstNameLastName", 1, IsUnique = true)]
public string FirstName { get; set; }

[StringLength(65)]
[Index("IX_FirstNameLastName", 2, IsUnique = true)]
public string LastName { get; set; }
于 2016-04-30T20:41:55.640 に答える