【问题标题】:How to DELETE multiple items from database with Code-First EF 4.1如何使用 Code-First EF 4.1 从数据库中删除多个项目
【发布时间】:2011-08-12 12:53:46
【问题描述】:

我们使用带有 DbContext 和 DbSet 的代码优先 EF 4 以及带有 DataAnnotations 的 POCO。 我是新手,似乎无法找到我的问题的答案:

如何直接从数据库中删除多个项目,而无需先使用 LINQ 选择项目,然后执行循环并在每次迭代时调用 Remove(item)?这对我来说似乎很愚蠢。

所有与此相关的引用都引用了似乎不存在的函数,例如我的 DbContext 中不存在的 DeleteOnSubmit(item)。此外,它只删除一项。

有没有更好的办法?

【问题讨论】:

    标签: .net database c#-4.0 entity-framework-4.1


    【解决方案1】:

    DeleteOnSubmit 是来自DataContext class= Linq-to-SQL 的函数

    您不必在删除项目之前加载它。如果你知道它的关键就足够了。像这样的东西应该可以工作:

    var item = new Item { Id = someId };
    context.Items.Attach(item);
    context.Items.Remove(item);
    context.SaveChanges();
    

    var item = new Item { Id = someId };
    context.Items.Attach(item);
    context.Entry(item).State = EntityState.Deleted;
    context.SaveChanges();
    

    如果不指定要删除的每个单个项目,则无法使用 EF 删除多个项目(级联删除除外)。如果要直接删除多个项目,则必须使用 SQL 之类的

    context.Database.ExecuteSqlCommand("DELETE ...");
    

    【讨论】:

      【解决方案2】:

      实体框架不支持一次多次删除,因为它需要内存中的对象。您需要遍历循环。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-11-03
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多