свободный API на таблице, которая имеет отношение к себе - PullRequest
0 голосов
/ 11 октября 2018

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

    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 Ответ

0 голосов
/ 11 октября 2018

Для 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);
    }
...