アイデア:キーエンティティ。他のキーに置き換えることができます。その場合、FKはお互いを指しています。
public class Key {
string Id;
string ReplacesId;
Key Replaces;
string ReplacedById;
Key ReplacedBy;
}
流暢なマッピング
modelBuilder.Entity<Key>().HasOne(k => k.Replaces)
.WithOne()
.HasForeignKey<Key>(k => k.ReplacesId)
.IsRequired(false);
modelBuilder.Entity<NagKey>().HasOne(k => k.ReplacedBy)
.WithOne()
.HasForeignKey<NagKey>(k => k.ReplacedById)
.IsRequired(false);
問題:エンティティを保存しようとすると、次のように重複する外部キーエラー(null)で失敗します。
System.Data.SqlClient.SqlException:一意のインデックスが 'IX_Keys_ReplacedById'のオブジェクト 'dbo.Keys'に重複するキー行を挿入できません。重複キー値は()です。ステートメントは終了されました。
インデックスを一意にしないことで解決しました。
modelBuilder.Entity<Key>()
.HasIndex(x => x.ReplacedById)
.IsUnique(false)
.HasFilter(null);
modelBuilder.Entity<Key>()
.HasIndex(x => x.ReplacesId)
.IsUnique(false)
.HasFilter(null);