C# 首先在实体框架数据库中级联删除

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

我想在ASP.NET 4.6.1 MVC项目中进行级联删除

这是数据库第一个项目,但级联删除不起作用

我得到这个错误:

操作失败:无法更改关系,因为一个或多个外键属性不可为空。
对关系进行更改时,相关外键属性设置为空值。
如果外键不支持

我有两张桌子:

类别:

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。它还提供了代码优先的答案。是的,你是对的!无论如何,这是一个很好的答案,谢谢你注意到我!