EF Core批量处理

目录

为什么不用SQL实现

EF Core5/6

EF Core7/8及以上版本

批处理

批量插入

批量删除

批量修改


为什么不用SQL实现

原生SQL语句需要把表名、列名等硬编码到SQL语句中,不符合模型驱动、分层隔离等思想,程序员直接面对数据库表,无法利用EF Core强类型的特性,如果模型发生改变,必须手动变更SQL语句。无法利用EF Core强大的SQL翻译机制来屏蔽不同底层数据库的差异。

EF Core5/6

使用这个开发包, Entity Framework Core 用户可以使用LINQ语句删除或者更新多条数据库记录,操作只执行一条SQL语句并且不需要首先把实体对象加载到内存中。 这个开发包支持 Entity Framework Core 5/6。

Zack.EFCore.Batch/README_CN.md at main · yangzhongke/Zack.EFCore.Batchhttps://github.com/yangzhongke/Zack.EFCore.Batch/blob/main/README_CN.md

EF Core7/8及以上版本

使用这个开发包, Entity Framework Core 用户可以快速批量插入数据。 这个开发包支持 Entity Framework Core 7/8及以上版本。

Zack.EFCore.Batch/README_CN_NET7.md at main · yangzhongke/Zack.EFCore.Batchhttps://github.com/yangzhongke/Zack.EFCore.Batch/blob/main/README_CN_NET7.md

批处理

以.NET9+SQLServer为例

NuGet安装:Install-Package Zack.EFCore.Batch.MSSQL_NET8

批量插入

static async Task Main(string[] args)
{
    using (MyDbContext ctx = new MyDbContext())
    {
        List<Book> books = new List<Book>();
        for (int i = 0; i < 10; i++)
        {
            books.Add(new Book { Name = "abc", Author = "小红", Price = new Random().NextDouble() });
        }
        ctx.BulkInsert(books);
    }
}

批量删除

static async Task Main(string[] args)
{
    using (MyDbContext ctx = new MyDbContext())
    {
        var a = await ctx.Books.Where(o => o.Author == "小红").ExecuteDeleteAsync();
    }
}

 

批量修改

static async Task Main(string[] args)
{
    using (MyDbContext ctx = new MyDbContext())
    {
        var a = await ctx.Books.Where(o => o.Author == "小红")
                .ExecuteUpdateAsync(o => o.SetProperty(o => o.Name, "124")
                                          .SetProperty(o => o.Author, "小花"));
    }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值