Свободный 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);
}