首页 > 其他分享 >EntityFrameWork Core 批量操作

EntityFrameWork Core 批量操作

时间:2024-03-19 18:55:41浏览次数:17  
标签:Core Name 批量 Title EntityFrameWork SQL SetProperty PublishedOn

在EF7.0的更新中,新增了批量更新和批量删除的功能:

 批量删除:ExecuteDelete 

对 DbSet 调用 ExecuteDelete 或 ExecuteDeleteAsync 会立即从数据库中删除该 DbSet 的所有实体。 例如,删除所有 Tag 实体:

await context.Tags.ExecuteDeleteAsync();

使用 SQL Server 时,这将执行以下 SQL:

DELETE FROM [t]
FROM [Tags] AS [t]

查询可以包含筛选器:

await context.Tags.Where(t => t.Text.Contains(".NET")).ExecuteDeleteAsync();

这会执行以下 SQL:

DELETE FROM [t]
FROM [Tags] AS [t]
WHERE [t].[Text] LIKE N'%.NET%'

批量更新:ExecuteUpdate 

await context.Blogs.ExecuteUpdateAsync(
    s => s.SetProperty(b => b.Name, b => b.Name + " *Featured!*"));

SetProperty 的第一个参数指定要更新的属性;在本例中,Blog.Name。 第二个参数指定应如何计算新值;在本例中,通过获取现有值并追加 "*Featured!*"。 生成的 SQL 为:

UPDATE [b]
SET [b].[Name] = [b].[Name] + N' *Featured!*'
FROM [Blogs] AS [b]

与 ExecuteDelete 一样,查询可用于筛选更新的实体。 此外,可以使用多个调用 SetProperty 来更新目标实体上的多个属性。

await context.Posts
    .Where(p => p.PublishedOn.Year < 2022)
    .ExecuteUpdateAsync(s => s
        .SetProperty(b => b.Title, b => b.Title + " (" + b.PublishedOn.Year + ")")
        .SetProperty(b => b.Content, b => b.Content + " ( This content was published in " + b.PublishedOn.Year + ")"));

在这种情况下,生成的 SQL 稍微复杂一些:

UPDATE [p]
SET [p].[Content] = (([p].[Content] + N' ( This content was published in ') + COALESCE(CAST(DATEPART(year, [p].[PublishedOn]) AS nvarchar(max)), N'')) + N')',
    [p].[Title] = (([p].[Title] + N' (') + COALESCE(CAST(DATEPART(year, [p].[PublishedOn]) AS nvarchar(max)), N'')) + N')'
FROM [Posts] AS [p]
WHERE DATEPART(year, [p].[PublishedOn]) < 2022

 

文章摘自微软文档:https://learn.microsoft.com/zh-cn/ef/core/what-is-new/ef-core-7.0/whatsnew?view=aspnetcore-2.2

标签:Core,Name,批量,Title,EntityFrameWork,SQL,SetProperty,PublishedOn
From: https://www.cnblogs.com/Keroro/p/18083691

相关文章

  • Mybatis使用JDBC实现数据库批量添加
    1、spring注入数据源@Resource(name="dataSource")privateDataSourcedataSource;2、连接数据库批量添加publicvoidinsertJdbc(List<StatisticStatus>statusList)throwsSQLException{Connectionconnection=null;PreparedStatem......
  • GO 批量修改 + 事务
    packagemainimport("database/sql""fmt"_"github.com/go-sql-driver/mysql"//引入你的数据库驱动)funcmain(){//建立数据库连接db,err:=sql.Open("mysql","user:password@/dbname")iferr!=nil{......
  • .NET Core获取当前IP方法(IPHelper)
     usingSystem.Linq;usingSystem.Net;usingSystem.Net.NetworkInformation;usingSystem.Net.Sockets;namespaceXLL.Common.Helper{publicclassIpHelper{///<summary>///获取当前IP地址///</summary>//......
  • 在 Docker 容器中运行 ASP.NET Core 应用
    创建Docker支持生成Dockerfile文件在解决方案asp.netcore项目下右键添加Dockerfile支持、选择目标OS为Linux,生成Dockerfile文件#Seehttps://aka.ms/customizecontainertolearnhowtocustomizeyourdebugcontainerandhowVisualStudiousesthisDockerfiletobuild......
  • .Net Core微服务 - Seq 日志聚合
    Seq简介Seq是一款使用现代化技术构建的结构化日志存储,查询,分析工具。比起ELK这种组合要轻量级许多。只需要一个安装包就具有数据存储,查询,图表分析功能。它对windows友好,直接提供了安装包。当然也可以使用docker来部署。Seq对于单个用户是免费的,这对于一些小团队并没有什......
  • .Net Core微服务 - Serilog+Seq记录日志
    Serilog介绍Serilog是用于.NET应用程序的诊断日志记录库。它易于设置,具有干净的API,并且可以在所有最新的.NET平台上运行。Serilog通过NuGet分发,项目包括一个Seirlog核心项目Seirlog和很多接收器sinks(超过100个),这些接收是通过插件的方式来实现将日志写入到各种终端、文件......
  • 抖音无水印视频批量下载|视频爬虫采集工具
    抖音无水印视频批量下载神器,关键词搜索轻松获取您想要的视频!    随着抖音视频内容日益丰富,您是否常常希望能够批量下载您感兴趣的视频,但现有工具只支持单个链接提取,操作繁琐?别担心,q1977470120我们特别开发了一款强大的抖音视频批量下载工具,让您通过关键词搜索轻松获取......
  • 【matlab】如何批量修改图片命名
    【matlab】如何批量修改图片命名(●’◡’●)先赞后看养成习惯......
  • 批量打开库存会计期SQL
    DECLARE l_last_scheduled_close_dateDATE; l_le_sysdateDATE; — l_prior_period_openBOOLEAN; l_new_acct_period_idNUMBER; l_duplicate_open_periodBOOLEAN; l_commit_completedBOOLEAN; l_return_statusVARCHAR2(1); BEGIN —operationunit......
  • EFcore 连接mysql的一些坑。
    好久不耍mysql了,EFcore连接的时候遇到了点问题,特此记录下来,防止以后又忘了。 第一个问题相当的奇葩,居然告诉我缺.NETcore2.0,,,无语,估计是依赖项里面引用了2.0,于是乎老老实实去官网下载安装。地址如下:https://dotnet.microsoft.com/zh-cn/download/dotnet/thank-you/sdk-2.0......