我想在ASP.NET 4.6.1 MVC项目中删除Cascade,
这是数据库优先项目,但是级联删除无效。
我收到此错误:
操作失败:由于一个或多个外键属性不可为空,因此无法更改关系。
更改关系后,相关的外键属性将设置为空值。
如果外键不支持...
我有两个表:
类别:
Category_ID
Category_Name
文章:
Article_ID
Article_Name
Article_Content
Category_ID which is Foreign key
这是我要删除的代码:
var context = new DbContext();
Category category = context.Category.First(c => c.CategoryID == catID);
if (category != null)
{
context.Category.Remove(category);
context.SaveChanges();
}
答案 0 :(得分:0)
更新:对于db,首先转到应级联的实体的属性,然后找到属性End2 On Delete。将此设置为级联。
对于代码优先: 您可以在映射中定义要级联删除的关系。在您的数据上下文中,重写OnModelCreating并定义您的自定义映射。
我还没有测试代码,但是看起来应该像这样:
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
modelBuilder.Entity<Article>()
.HasRequired(a => a.Category)
.WithMany(c => c.Articles)
.HasForeignKey(a => CategoryId)
.WillCascadeOnDelete();
}
这个想法是在您的映射上调用WillCascadeOnDelete()
。
https://msdn.microsoft.com/en-us/library/gg696319(v=vs.113).aspx
答案 1 :(得分:0)
如果使用数据库优先方法,则首先需要为数据库中与Cascade的关系设置“删除规则”。
然后在程序中更新您的EF设计器。现在,以下代码将删除Category对象及其所有Articles:
如果(dbContext.Entry(categoryObj).State == System.Data.Entity.EntityState.Detached) dbContext.Categories.Attach(categoryObj);
dbContext.Categories.Remove(categoryObj);
dbContext.SaveChanges();