entity-framework - 与自身有关系的表上的流利 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.
所以我决定使用 fluent API 来解决这个问题,但我不知道如何ON DELETE NO ACTION
通过 Fluent API 在与自身有关系的表上进行指定。有什么帮助吗?有什么办法可以解决我的问题吗?
解决方案
对于 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);
}
推荐阅读
- ionic-framework - ionic 4 增加复选框图标大小
- angular - Angular - 将字符串解析为 {{ dataObject + VARIABLE }} where VARIABLE = 'object?.key.something | 管道'
- python-3.x - 使用 tkinter 使用套接字客户端的 pythonic 方法是什么?
- javascript - 在 puppeteer 请求中使用不同的 IP 地址
- reactjs - Cypress 找不到 Material-UI 的 textarea
- php - PHP - 使用空合并运算符通过引用赋值
- java - 在java中读取文本文件的问题
- arrays - 如何减少数组中移动操作的数量?
- git - 在推送的分支中压缩历史提交
- android - Android Studio 中的 Webview 上没有可用的预览