相关疑难解决方法(0)

如何在Entity Framework中删除多行(没有foreach)

我正在使用Entity Framework从表中删除多个项目.没有外键/父对象,因此我无法使用OnDeleteCascade处理此问题.

现在我这样做:

var widgets = context.Widgets
    .Where(w => w.WidgetId == widgetId);

foreach (Widget widget in widgets)
{
    context.Widgets.DeleteObject(widget);
}
context.SaveChanges();
Run Code Online (Sandbox Code Playgroud)

它有效但是foreach让我烦恼.我正在使用EF4,但我不想执行SQL.我只是想确保我没有遗漏任何东西 - 这一切都很好,对吧?我可以用扩展方法或帮助器来抽象它,但在某个地方我们仍然会做一个foreach,对吧?

entity-framework

292
推荐指数
11
解决办法
29万
查看次数

如何在Entity Framework Core中获取映射实体的表名

在某些原因,我需要在EFCore中使用SQL,我将使用映射实体的表名.我怎么才能得到它?

entity-framework-core .net-core asp.net-core

30
推荐指数
2
解决办法
9647
查看次数

删除LINQ查询中的多个记录的最佳方法?

使用LINQ一次删除多个记录的最佳方法是什么?

linq linq-to-sql

24
推荐指数
4
解决办法
6万
查看次数

实体框架在提交时删除全部

在LINQ to SQL中,我可以这样做:

context.User_Roles.DeleteAllOnSubmit(context.User_Roles.Where(ur => ur.UserId == user.UserId));
Run Code Online (Sandbox Code Playgroud)

什么与实体框架相当?

entity-framework

18
推荐指数
2
解决办法
2万
查看次数

实体框架:如何通过主键删除记录?

如何在不先加载SELECT语句来加载实体的情况下,通过主键删除记录?

entity-framework

13
推荐指数
2
解决办法
8695
查看次数

实体框架4多个对象删除(RemoveAll)

我读到新的实体框架将包含一个删除多个项目的方法(Linq to SQL有DeleteAllOnSubmit()),但我找不到这样做的函数/方法.

这是在Beta 2还是我必须自己制作?

更新:

这就是我现在使用的:

    public void DeleteObjects(IEnumerable<object> objects)
    {
        foreach (object o in objects)
        {
            DeleteObject(o);
        }
        SaveChanges();
    }
Run Code Online (Sandbox Code Playgroud)

.net-4.0 entity-framework-4

12
推荐指数
1
解决办法
8903
查看次数

使用Linq to Entity删除多行的有效方法?

嗨,我正在寻找一次删除多个记录的有效方法.我正在删除400条记录,需要8-15秒.这是我的代码

using (var entities = new Entity())
   {                               
       foreach (Item item in entities.Items.Where(x => x.id == id))
              entities.DeleteObject(item);
       entities.SaveChanges();
   }
Run Code Online (Sandbox Code Playgroud)

c# linq-to-entities

10
推荐指数
1
解决办法
1万
查看次数

是否有像DbSet <T> .RemoveWhere(Predicate <T>)的东西

可能重复:
LINQ to Entities中的批量删除

我需要按条件删除一些实体.例如,删除数量小于1的所有订单商品:

var orderId = 10; // any order Id
context.OrderItems.RemoveWhere(item => item.OrderId == orderId && item.Quantity < 1.0);
Run Code Online (Sandbox Code Playgroud)

我知道,我可以选择这些项目,然后像这样一个一个地删除它们:

var itemsToRemove = context.OrderItems.Where(item => item.OrderId == orderId && item.Quantity < 1.0).ToArray();

foreach (var item in itemsToRemove)
  context.OrderItems.Remove(item);
Run Code Online (Sandbox Code Playgroud)

但这是不太可能的,因为会有额外的工作.我错过了什么吗?

.net c# entity-framework ef-code-first entity-framework-4.3

7
推荐指数
1
解决办法
1953
查看次数

实体框架 - 有效删除所有子实体而不加载它们

我对Entity Framework完全不熟悉,所以请原谅我,如果我的逻辑偏差/这是事情已经发挥作用的方式,但我正在开发一个应用程序,其中:

  1. 我将父信息存储在一个主键=的表中 ParentId
  2. 对于每一个ParentId,我将数千条记录存储在父表中具有一对多外键关系的子表中.

因此,如果父母的信息发生变化(这可能经常发生),我想要做的是让我的程序执行相当于:

DELETE FROM ChildTable WHERE ParentId = 'xx'
Run Code Online (Sandbox Code Playgroud)

在使用相同ParentId的新/更新值更新子表之前.


从我所看到的,我这样做的方式是:

  • 使用ctx.Database.ExecuteSqlCommand()概念类型输入实际的SQL命令
  • 在某种程度上,实际上循环遍历子元素并在更新数据库上下文之前将它们设置为删除(这似乎是非常低效的,因为我猜它必须从数据库中取出它们才能做到这一点和我想做的就是删除所有内容).

以最有效的方式在EF中执行此操作的正确方法是什么?

.net c# vb.net entity-framework

7
推荐指数
1
解决办法
3252
查看次数

实体框架中的批量删除

我想使用 linq 从表中批量删除记录。有一篇文章描述了如何做: Bulk-deleting in LINQ to Entities

var query = from c in ctx.Customers
            where c.SalesPerson.Email == "..."
            select c;

query.Delete();
Run Code Online (Sandbox Code Playgroud)

但是我的 var 变量中不存在函数“Delete”。
此外,我的上下文中不存在函数“SubmitChanges”。

c# entity-framework linq-to-sql

5
推荐指数
1
解决办法
2万
查看次数

通过Linq从数据库中删除很慢

我在c#中删除了一个应用程序,我利用linq to entities它在我的应用程序中构建查询.但是我发现我的应用程序在添加和删除记录时非常慢.删除500条记录大约需要15分钟.那太久了.我的删除查询如下.

public void deletePayrollBatch(int batchNo) 
{
          var context = new DataSources.sspEntities();
          var query1 = (from a in context.Payroll_Details
                        where a.Payroll_BatchBatch_no == batchNo
                        select a).ToList();

           foreach (var x in query1) 
           {
                context.DeleteObject(x);
                context.SaveChanges();
           }
}
Run Code Online (Sandbox Code Playgroud)

我的查询相当简单.一行数据确实包含大约20列.我不知道这是否会产生影响.无论如何,如果我能得到一些专家建议,那将会有所帮助.谢谢.

编辑.

基于删除,我已经有了很好的建议.其中之一是context.SaveChanges()在循环之外使用.在我的插入中,我有类似的代码(如下所示),但我需要首先保存记录,因为我希望ID在另一个函数中使用它.在这种情况下,我该怎么办?

foreach (var xyz in x)
{
   Try{
          pDetails1.EstateID = 143;
          pDetails1.Employee_Personal_InfoEmp_id = xyz.PD_EmpPersonal_Id;
          pDetails1.PAYE = (decimal)xyz.PD_PAYE.GetValueOrDefault();
          pDetails1.PAYE_YTD = (decimal)PayeYTD.GetValueOrDefault();
          pDetails1.Basic_Pay = (decimal)xyz.PD_BasicPay.GetValueOrDefault();
          pDetails1.Basic_Pay_YTD = (decimal)basicpay_YTD.GetValueOrDefault();
          pDetails1.Gross_Pay = (decimal)xyz.PD_GrossPay.GetValueOrDefault();
          pDetails1.Gross_Pay_YTD = (decimal)GrossPay_YTD.GetValueOrDefault();

          context.SaveChanges();
          Functions.RandomFunct rf = new RandomFunct(); …
Run Code Online (Sandbox Code Playgroud)

c# linq database linq-to-entities

0
推荐指数
1
解决办法
382
查看次数