C# 首先在实体框架数据库中级联删除
我想在ASP.NET 4.6.1 MVC项目中进行级联删除 这是数据库第一个项目,但级联删除不起作用 我得到这个错误: 操作失败:无法更改关系,因为一个或多个外键属性不可为空。C# 首先在实体框架数据库中级联删除,c#,asp.net-mvc,entity-framework,C#,Asp.net Mvc,Entity Framework,我想在ASP.NET 4.6.1 MVC项目中进行级联删除 这是数据库第一个项目,但级联删除不起作用 我得到这个错误: 操作失败:无法更改关系,因为一个或多个外键属性不可为空。 对关系进行更改时,相关外键属性设置为空值。 如果外键不支持 我有两张桌子: 类别: Category_ID Category_Name 第条: Article_ID Article_Name Article_Content Category_ID which is Foreign key 这是我要删除的代码: v
对关系进行更改时,相关外键属性设置为空值。
如果外键不支持 我有两张桌子: 类别:
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();
}
更新:对于db-first,转到应该级联的实体的属性,并在Delete上找到属性End2。将此设置为级联 对于代码优先: 您可以定义要在映射中级联删除的关系。在数据上下文中,重写OnModelCreating并定义自定义映射 我没有测试代码,但它应该是这样的:
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
modelBuilder.Entity<Article>()
.HasRequired(a => a.Category)
.WithMany(c => c.Articles)
.HasForeignKey(a => CategoryId)
.WillCascadeOnDelete();
}
模型创建时受保护的覆盖无效(DbModelBuilder modelBuilder)
{
实体如果使用数据库优先方法,首先需要为要在数据库中级联的关系设置删除规则
然后在程序中更新EF设计器。现在,以下代码将删除类别对象及其所有文章:
if (dbContext.Entry(categoryObj).State == System.Data.Entity.EntityState.Detached)
dbContext.Categories.Attach(categoryObj);
dbContext.Categories.Remove(categoryObj);
dbContext.SaveChanges();
您需要向我们显示您的表/代码,以便我们可以帮助您。但是错误消息非常明显,您有一个不可为空的外键关系。因此,如果删除记录,外键关系将无效。我编辑了我的问题,但为什么级联删除不起作用,但我想删除与特定类别相关的所有文章当我删除那个类别时!!!不,这是数据库优先,我的问题标题是数据库优先,你能更改你的数据库模式吗?比如添加“删除级联”对于您的FK?这是数据库优先还是代码优先的解决方案?问题指定db优先。这是代码优先。对于db优先,visual studio设计器中有一些选项可以设置此属性。我将更新答案提问者要求首先在EF数据库中进行级联删除,但答案是代码优先的方法!@PureSilence否!f答案的第一段是db first。它还提供了代码优先的答案。是的,你是对的!无论如何,这是一个很好的答案,谢谢你注意到我!