如何在 ASP.NET 中的 Entity Framework 中设置删除级联以供自引用外键
How to set on delete cascade for self reference Foreign Key in Entity Framework in ASP.NET
我正在开发一个 ASP.NET MVC 项目。我正在使用 Entity Framework 代码优先方法与数据库交互。但是我在为实体的自引用外键设置级联删除时遇到问题。
这是我的实体class,带有自引用外键
public class Category
{
public int Id { get; set; }
[Required]
[MaxLength(50)]
public string Name { get; set; }
[MaxLength(55)]
public string MmName { get; set; }
public int? ParentId { get; set; }
[ForeignKey("ParentId")]
public virtual Category ParentCategory { get; set; }
public virtual ICollection<Category> Categories { get; set; }
}
这是我的背景
public class StoreContext : DbContext
{
public StoreContext():base("DefaultConnection")
{
}
public DbSet<Category> Categories { get; set; }
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
modelBuilder.Entity<Category>().HasOptional(x => x.ParentCategory).WithMany(c => c.Categories).WillCascadeOnDelete();
}
}
当我运行时,抛出多个级联路径错误
Introducing FOREIGN KEY constraint 'FK_dbo.Categories_dbo.Categories_ParentId' on table 'Categories' may cause cycles or multiple cascade paths. Specify ON DELETE NO ACTION or ON UPDATE NO ACTION, or modify other FOREIGN KEY constraints.
Could not create constraint. See previous errors.
是否可以先在entity framework代码中为自引用外键设置删除级联?
我也遇到了类似的问题,如果我没记错的话我发现的是EF不支持自引用级联删除,所以我们需要通过代码来处理它.我关注的是
- 从 fluent api 或生成的迁移中移除级联删除。
- 添加代码delte/setnull全部自引用然后删除
我正在开发一个 ASP.NET MVC 项目。我正在使用 Entity Framework 代码优先方法与数据库交互。但是我在为实体的自引用外键设置级联删除时遇到问题。
这是我的实体class,带有自引用外键
public class Category
{
public int Id { get; set; }
[Required]
[MaxLength(50)]
public string Name { get; set; }
[MaxLength(55)]
public string MmName { get; set; }
public int? ParentId { get; set; }
[ForeignKey("ParentId")]
public virtual Category ParentCategory { get; set; }
public virtual ICollection<Category> Categories { get; set; }
}
这是我的背景
public class StoreContext : DbContext
{
public StoreContext():base("DefaultConnection")
{
}
public DbSet<Category> Categories { get; set; }
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
modelBuilder.Entity<Category>().HasOptional(x => x.ParentCategory).WithMany(c => c.Categories).WillCascadeOnDelete();
}
}
当我运行时,抛出多个级联路径错误
Introducing FOREIGN KEY constraint 'FK_dbo.Categories_dbo.Categories_ParentId' on table 'Categories' may cause cycles or multiple cascade paths. Specify ON DELETE NO ACTION or ON UPDATE NO ACTION, or modify other FOREIGN KEY constraints.
Could not create constraint. See previous errors.
是否可以先在entity framework代码中为自引用外键设置删除级联?
我也遇到了类似的问题,如果我没记错的话我发现的是EF不支持自引用级联删除,所以我们需要通过代码来处理它.我关注的是
- 从 fluent api 或生成的迁移中移除级联删除。
- 添加代码delte/setnull全部自引用然后删除