使用EF Core关闭级联删除子实体

时间:2019-10-10 10:27:08

标签: entity-framework entity-framework-core cascading-deletes

我有两个模型:

public enum FieldDataType
{
    Text,
    Integer,
    BigInteger,
    Double,
    Boolean
}

public class Field
{
    [Required] public int Id { get; set; }
    [Required, MaxLength(100)] public string CategoryId { get; set; }
    [Required, MaxLength(100)] public string Name { get; set; }
    public FieldDataType DataType { get; set; }
    public bool IsSpecification { get; set; }

    public IList<FieldMap> FieldMaps { get; set; }
}

还有

public class FieldMap
{
    public int Id { get; set; }
    public int FeedId { get; set; }
    public int FieldId { get; set; }
    [Required, MaxLength(100)] public string Path { get; set; }

    public Field Field { get; set; }
}

字段可以有多个 fieldMaps ,而 fieldMap 只能有一个 field 字段是父级。如果已删除,则应删除所有 FieldMaps

如果删除了 FieldMap ,则不应删除 Field

我这样建立我的关系:

modelBuilder.Entity<Field>().HasMany(m => m.FieldMaps).WithOne().HasForeignKey(m => m.FieldId);

运行update-database时出现此错误:

  

在表“映射”上引入外键约束“ FK_Mappings_Fields_FieldId”可能会导致循环或多个级联路径。指定ON DELETE NO ACTION或ON UPDATE NO ACTION,或修改其他FOREIGN KEY约束。

因此,我尝试通过执行以下操作来禁用子表上的级联删除:

modelBuilder.Entity<FieldMap>().HasOne(m => m.Field).WithMany().OnDelete(DeleteBehavior.Restrict);

但是我仍然得到错误。 有人知道我在做什么错吗?

0 个答案:

没有答案
相关问题