아이디어 : 키 엔티티. 다른 키로 대체 할 수 있습니다. 발생하면 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);