想法:密钥实体,可以用其他密钥替换,如果发生这种情况,它们会使其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”中插入重复的键行。重复的键值为()。该声明已终止。
答案 0 :(得分:0)
通过使索引不唯一而解决:
modelBuilder.Entity<Key>()
.HasIndex(x => x.ReplacedById)
.IsUnique(false)
.HasFilter(null);
modelBuilder.Entity<Key>()
.HasIndex(x => x.ReplacesId)
.IsUnique(false)
.HasFilter(null);