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

MrM*_*afa 5 c# asp.net-mvc entity-framework

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

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

我收到此错误:

操作失败:无法更改关系,因为一个或多个外键属性不可为空。
当关系发生更改时,相关的外键属性将设置为空值。
如果外键不支持...

我有两张桌子:

类别:

Category_ID
Category_Name
Run Code Online (Sandbox Code Playgroud)

文章:

Article_ID
Article_Name
Article_Content
Category_ID   which is Foreign key
Run Code Online (Sandbox Code Playgroud)

这是我要删除的代码:

var context = new DbContext();

Category category = context.Category.First(c => c.CategoryID == catID);

if (category != null)
{
    context.Category.Remove(category);
    context.SaveChanges();
}
Run Code Online (Sandbox Code Playgroud)

dex*_*ter 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();

    }
Run Code Online (Sandbox Code Playgroud)

这个想法是调用WillCascadeOnDelete()你的映射。

https://msdn.microsoft.com/en-us/library/gg696319(v=vs.113).aspx

  • @PureSilence 不!答案中的第一段首先是 db 。之后它还提供了代码第一个答案 (2认同)