Свободный API на таблице, которая имеет отношение к себе

Я создал таблицу, которая имеет отношение к себе, таблица имеет отношение один ко многим, вот моя сущность:

    public class Permission
    {
        [Key]
        public int PermissionId { get; set; }      
        public string PermissionTitle { get; set; }
        public int? ParentId { get; set; }

        #region Relations

        [ForeignKey("ParentId")]
        public virtual ICollection<Permission> Permissions { get; set; }   

        #endregion

    }

но когда я использовал миграцию для создания таблицы в SQL, update-database не удалось из-за этой ошибки:

Introducing FOREIGN KEY constraint 'FK_Permission_Permission_ParentId' on table 'Permission' may cause cycles or multiple cascade paths. Specify ON DELETE NO ACTION or ON UPDATE NO ACTION, or modify other FOREIGN KEY constraints.

Поэтому я решил использовать свободный API для решения этой проблемы, но я не знаю, как указать ON DELETE NO ACTION Fluent API для таблицы, которая имеет отношение к себе. любая помощь? Есть ли решение, чтобы решить мою проблему?

1 ответ

Решение

Для EF Core у сущности обычно должно быть два свойства навигации, например:

public class Permission
{
    [Key]
    public int PermissionId { get; set; }
    public string PermissionTitle { get; set; }
    public int? ParentPermissionId { get; set; }

    #region Relationships
    public virtual Permission ParentPermission { get; set; }

    public virtual ICollection<Permission> ChildPermissions { get; } = new HashSet<Permission>();
    #endregion

}

И настроен так:

    protected override void OnModelCreating(ModelBuilder modelBuilder)
    {
        modelBuilder.Entity<Permission>()
            .HasMany(p => p.ChildPermissions)
            .WithOne(p => p.ParentPermission)
            .HasForeignKey(p => p.ParentPermissionId)
            .OnDelete(DeleteBehavior.Restrict);

        base.OnModelCreating(modelBuilder);
    }
Другие вопросы по тегам