2016-12-15 19 views
1

私は私の一対一の関係をEFコア1.1を使用して作成されています、例: EFコア1.1は、1対1

EntityTypeBuilder<Account> 
    .HasOne(a => a.Customer) 
    .WithOne(a => a.Account) 
    .HasForeignKey<Account>(a => a.CustomerId) 

は今アドオンの移行を上で使用して私のDbContextは次のように生成します:

migrationBuilder.CreateIndex(
    name: "IX_Accounts_CustomerId", 
    table: "Accounts", 
    column: "CustomerId", 
    unique: true); 

インデックスから一意性を削除する方法はありますか?私はインデックスが生成されても構いませんが、私の目的のためには一意にすることはできません。その理由は、これらのテーブルは監査可能であるため、重複するデータ(PKの外部)が存在する可能性があるからです。したがって、レコードには、そのFKエンティティに変更がない場合(ただしレコード内の他の場所で変更される可能性がある)、同じFK idを含むことができます。

TL; DR 1対1 FKのFluentでインデックスを一意にする方法はありませんか?

+0

テーブルに重複を含めることができる場合は、「1対1」ではなく「1対多」であると思いますか? –

答えて

2

外部キーを一意でないものにする場合は、流暢なAPIでFKプロパティのインデックスを設定し、一意でないものに設定する必要があります。 OnModelCreating()メソッドに次のコード行を追加すると、望ましい結果が得られます。

modelBuilder.Entity<Account>().HasIndex(e => e.CustomerId).IsUnique(false); 

ナビゲーションプロパティを固定して一対一の関係のためにFK性に重複した値は、実行時に望ましくない影響を有することができる有するけれども。

+0

それは私にとってはうまくいかなかった。ユニークなインデックスが作成されました。 –

+0

FKを非ユニークインデックスに指定できる1対1マッピングの機能を追加できますか?この場合、EFはカスケード削除を自動的に制限しますか? –

+0

ところで、OnModelConfiguring()がないので、あなたはOnModelCreating()について話していると仮定します。そうでない場合は、DbContextに表示される唯一の他のメソッドはOnConfiguring(DbContextOptionsBuilder optionsBuilder)ですが、これはあなたの話ではないと思います。 –

関連する問題