无法插入具有空外键的实体

时间:2019-02-18 11:28:35

标签: entity-framework entity-framework-core

想法:密钥实体,可以用其他密钥替换,如果发生这种情况,它们会使其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”中插入重复的键行。重复的键值为()。该声明已终止。

1 个答案:

答案 0 :(得分:0)

通过使索引不唯一而解决:

modelBuilder.Entity<Key>()
    .HasIndex(x => x.ReplacedById)
    .IsUnique(false)
    .HasFilter(null);

modelBuilder.Entity<Key>()
    .HasIndex(x => x.ReplacesId)
    .IsUnique(false)
    .HasFilter(null);