Отключите каскадное удаление дочерней сущности с помощью EF Core - PullRequest
0 голосов
/ 10 октября 2019

У меня есть две модели:

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; }
}

A поле может иметь множество fieldMaps и fieldMap может иметь только одно поле . Поле является родительским. Если он удален, то он должен удалить все FieldMaps .

. Если FieldMap удален, он не должен удалять Поле .

Я установил свои отношения следующим образом:

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

Когда я запускаю update-database, я получаю эту ошибку:

Введение ограничения FOREIGN KEY '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);

Но я все еще получаю ошибку. Кто-нибудь знает, что я делаю не так?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...