【问题标题】:convert a SQL update statement to a LINQ to Entities将 SQL 更新语句转换为 LINQ to Entities
【发布时间】:2019-12-15 19:04:57
【问题描述】:

如果不编写整个 foreach 循环,有没有办法在 LINQ to Entities 中进行更新/设置? 使用 EF 6.x

简单的更新查询:

UPDATE stop_detail 
SET cap_unique_id = b.Delivery_Location_Id 
FROM order_detail b 
WHERE Stop_Detail.CAP_Unique_Id IS NULL AND ((b.customer_id = 20 OR b.customer_id = 291)  AND b.id = stop_detail.order_detail_id AND stop_type = 1) 

所有上下文名称都相同。 我通常最终会编写大约 30 行 C# 代码来执行此操作,我知道必须有更好的方法!

【问题讨论】:

  • 在 EntityFramework 中更新实体的默认方式是查询您的目标集,然后在 循环 中修改查询的实体,然后调用 SaveChanges。除非您使用第三方库,否则这是更新数据库的标准程序。它不应该是 30 行代码。理论上query.ToList() 1 行。 foreach 2 行(或者您可以使用 list.Foreach(t=> ...) 用于 1 行),然后调用 SaveChanges 1 行 ..
  • 谢谢你……我就是这么干的……只是想知道是否有更好的方法。
  • 我夸大了 30 行,但你知道我的意思...感谢 Eldar 的回复

标签: c# .net linq tsql entity-framework-6


【解决方案1】:

你是否可以和你是否应该是两个不同的东西。

你可以这样做

来自EF6 Raw SQL Queries的示例

using (var context = new BloggingContext())
{
    context.Database.ExecuteSqlCommand(
        "UPDATE dbo.Blogs SET Name = 'Another Name' WHERE BlogId = 1");
}

提示:你可能不应该

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-08-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-10-25
    • 2023-01-13
    相关资源
    最近更新 更多