LINQ to Entities DeleteAllOnSubmit抛出Unknown方法

时间:2015-02-17 04:54:55

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

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

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

我尝试替换的L2S代码段如下:

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

根据收到的评论,我修改了以下代码:

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

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

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

1 个答案:

答案 0 :(得分: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 Code First,您只需要删除一个实体,然后将其状态设置为Deleted。这证明了Delete Entity using DBContext