【问题标题】:LINQ to Entities DeleteAllOnSubmit throws Unknown MethodLINQ to Entities DeleteAllOnSubmit 抛出未知方法
【发布时间】:2015-02-19 11:19:03
【问题描述】:

我正在重写一个曾经使用 LINQ to SQL DeleteAllOnSubmit 的应用程序,现在我在 MVC5 应用程序中使用 LINQ to Entities。 MSDN 展示了构建我的 L2E 代码的方法。但是,我收到以下 sn-p 的未知方法:

IEnumerable<QuoteItem> quoteItemsToDelete = (from qi in QuoteItem
where qi.QuoteID = q.QuoteID
select qi).ToList();
QuoteItem.DeleteAllOnSubmit(quoteItemsToDelete);
SubmitChanges();

我要替换的 L2S sn-p 如下:

    HttpContext.Current.GetDataContext().QuoteItems.
    DeleteAllOnSubmit<QuoteItem>(q.QuoteItems);

根据收到的cmets,我修改代码如下:

using (var ctx = new FreightEntities())
        {
            var quoteitemtoDelete = ctx.QuoteItems.Remove();
            ctx.SaveChanges();
        }

但是,这会导致Unknown Method Remove() of System.Data.Entity.DbSet

我应该如何修改我的 L2E 代码以实现与 L2S 语法相同的目的?

【问题讨论】:

  • 您在寻找Remove()吗?
  • 这相当于我引用的 L2S sn-p 吗?
  • @SidC 是的。使用删除()。 L2E 中没有 DeleteAllOnSubmit()

标签: c# asp.net-mvc linq entity-framework


【解决方案1】:

下面几行应该适合你:

    public void DeleteAllOnSubmit<T>(IEnumerable<T> items) where T : class
    {
        foreach (var item in items)
        {
            Set<T>().Attach(item);
            Set<T>().Remove(item);
        }

        SaveChanges();
    }

基本上,您必须遍历每个项目并一次调用 Remove 传递单个项目。

要了解更多有关删除方法的信息,请参阅DbSet.Remove()

使用 EF 代码首先,您需要删除一个实体,将其附加并将其状态设置为已删除。这是演示Delete Entity using DBContext

【讨论】:

  • 我的理解是 DeleteAllOnSubmit 在 LINQ to Entities 中不可用?
  • 不是,你可以在你的上下文类中定义一个方法。
  • @SidC - 这有意义吗?我不知道你在 FreightEntities 中有什么,基本上这样的 CRUD 方法在 DbContext 实现类中。我将我的 RemoveAll() 重命名为 DeleteAllOnSubmit()。如果您需要任何解释,请告诉我。
  • 你能详细说明一下吗?谢谢!
  • @SidC - 我更新了我的答案,提供了有关 Remove 方法的更多信息以及另一种删除实体的方法。如果您有具体问题,请分享。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-10-23
  • 1970-01-01
  • 2015-08-25
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多