当前位置: 首页 > 编程语言 > C#

entity framework通过将当前值增加一而不选择来更新一列分享

时间:2023-04-11 01:54:26 C#

C#学习教程:实体框架通过在不选择共享的情况下将当前值递增一来更新列COLUMN=COLUMN+1有没有一种方法可以实现它而不首先将所有记录(数千条)加载到内存中并循环遍历每条记录以增加列然后将其保存回来?编辑我试过原始SQL并且它有效。我必须根据连接上下文中的连接字符串和数据库架构名称来决定sql提供程序。之后,我使用相应的sql查询来更新表。对于SQL,它看起来像UPDATEschemaname.TABLESETCOLUMN=COLUMN+1。对于POSTGRESQL,我必须将模式名称、表名称和列名称用双引号引起来:UPDATE“schemaname”。"TABLE"SET"COLUMN"="COLUMN"+1。使用纯EF,你是对的:你必须一个一个地加载实体,设置属性,然后保存。非常低效。我知道的两个备选方案是:提供原始SQL以根据需要执行UPDATE语句。使用EntityFramework.Extended库(https://github.com/loresoft/EntityFramework.Extended),它支持具有自然EF感觉的批量更新和删除。从他们的主页引用:批量更新和删除实体框架的当前限制是为了更新或删除实体,您必须首先将其检索到内存中。现在在大多数情况下这很好。但是,有一些严重的性能问题。此外,对于单个删除,对象必须在删除之前被检索,需要对数据库进行两次调用。批量更新和删除消除了在修改实体之前检索和加载实体的需要。delete//删除FirstName匹配的所有用户context.Users.Where(u=>u.FirstName=="firstname").Delete();update//将状态为1的所有任务更新为状态2context.Tasks.更新(t=>t.StatusId==1,t2=>新任务{StatusId=2});//使用IQueryable作为更新过滤器的示例varusers=context.Users.Where(u=>u.FirstName=="firstname");context.Users.Update(users,u=>newUser{FirstName="newfirstname"});这就是解决方案。您可以使用此代码:context.Table.Where(x=>x.Field1>0).Update(y=>newTable{Field2=y.Field2+1});希望能帮助到你。以上是C#学习教程:entityframework通过当前值加一而不是选中来更新分享一栏的全部内容。如果对大家有用,需要进一步了解C#学习教程,希望大家多加关注——本文来自网络收集,不代表立场,如涉及侵权,请点击有权联系管理员删除。如需转载请注明出处: