entityframework三种使用方式(entityframeworkcore教程)

技术Entity Framework Core 批处理语句是什么小编给大家分享一下Entity Framework Core 批处理语句是什么,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这

边肖将与您分享什么是实体框架核心批处理语句。相信大部分人都不是很了解,所以分享这篇文章供大家参考。希望你看完这篇文章后有很多收获。我们一起来看看吧!

实体框架核心(EF Core)中有很多新功能,其中最受期待的功能之一就是批处理语句.那么批处理语句是什么呢?Batch语句意味着它不会为每个insert/update/delete语句发送单独的请求,而是在数据库的单个请求中分批执行多个语句。在本文中,让我们看看它是如何工作的,并将结果与EF6进行比较。

EF Core将一次准备多个语句,然后在一个请求中执行它们,因此它可以提供更好的性能和速度。让我们看看它是如何工作的。我们将使用SQL Server Profiler来捕获实际生成和执行的查询。

插入操作

首先,我们来看看插入语句的行为。下面的代码将三条记录添加到类别表中:

使用(vardataContext=newSampleDBContext()){ 0

dataContext。类别。添加(新类别()}

CategoryID=1,

类别名称='服装'

});

dataContext。类别。添加(新类别()}

CategoryID=2,

类别名称=“鞋类”

});

dataContext。类别。添加(新类别()}

CategoryID=3,

类别名称='附件'

});

dataContext。saveChanges();

}执行SaveChanges()时,以下是生成的语句(由SQL Server Profiler捕获):

execsp _ executesqlN ' setnocounton;INSERTINTO[categorid]([CategoryID],[CategoryName])VALUES(@p0,@p1)、(@p2,@p3)、(@p4,@ P5);n' @ P0int、@ P1 nvarchar (4000)、@ P2int、@ P3 nvarchar (4000)、@ P4int、@ P5 nvarchar (4000)'、@ P0=1、@ P1=n '衣饰'、@ P2=2、@ P3以下是SQL Server Profiler的截图:

Entity  Framework  Core  批处理语句是什么

如果我们在EF 6中执行相同的代码,我们将在SQL Server Profiler中看到三个独立的插入语句:

Entity  Framework  Core  批处理语句是什么

性能和速度差别很大。如果这些查询是针对部署在云端的数据库,也将更具成本效益。现在,让我们看看如果它是一个update语句会发生什么。

>

更新操作

以下代码将获得所有category记录列表,然后遍历它们,并为每个类别名称追加“-Test”文本,并保存。在这个时间点上,数据库中只有3条记录。

using (var dataContext = new SampleDBContext()) {
    List<Category> lst = dataContext.Categories.ToList();   
    foreach (var item in lst) {        item.CategoryName = item.CategoryName + "-Test";    }    dataContext.SaveChanges(); }

并且在EF Core执行时,生成以下查询(通过 SQL Server Profiler 捕获)。

exec sp_executesql N'SET NOCOUNT ON;UPDATE [Categories] SET [CategoryName] = @p0WHERE [CategoryID] = @p1;SELECT @@ROWCOUNT;UPDATE [Categories] SET [CategoryName] = @p2WHERE [CategoryID] = @p3;SELECT @@ROWCOUNT;UPDATE [Categories] SET [CategoryName] = @p4WHERE [CategoryID] = @p5;SELECT @@ROWCOUNT;',N'@p1 int,@p0 nvarchar(4000),@p3 int,@p2 nvarchar(4000),@p5 int,@p4 nvarchar(4000)',@p1=1,@p0=N'Clothing-Test',@p3=2,@p2=N'Footwear-Test',@p5=3,@p4=N'Accessories-Test'

您可以看到,有3个更新语句,但都被组合成单条SQL语句。在EF 6执行相同的代码,SQL Server Profiler中将显示3个单独的更新语句:

Entity Framework Core 批处理语句是什么

使用EF 6,将有1 + N往返数据库,一次加载数据以及每行数据的修改;但是使用EF Core,保存操作是批量的,所以只有两次往返数据库。

插入、更新、删除混合操作

现在让我们尝试将3个操作混合在一起,看看EF Core和EF 6的行为。以下代码将更新现有记录,并插入2条新记录,最后删除一条记录。

using (var dataContext = new SampleDBContext())
{
    Category cat = dataContext.Categories.First(c => c.CategoryID == 3);
    cat.CategoryName = "Accessory";
    dataContext.Categories.Add(new Category() { CategoryID = 4, CategoryName = "Fragnance" });
    dataContext.Categories.Add(new Category() { CategoryID = 5, CategoryName = "Sports" });
    Category catToDelete = dataContext.Categories.First(c => c.CategoryID == 2);
    dataContext.Entry(catToDelete).State = EntityState.Deleted;
    dataContext.SaveChanges();
}

当执行SaveChanges()时,生成以下查询(通过 SQL Server Profiler 捕获):

exec sp_executesql N'SET NOCOUNT ON;DELETE FROM [Categories]WHERE [CategoryID] = @p0;SELECT @@ROWCOUNT;UPDATE [Categories] SET [CategoryName] = @p1WHERE [CategoryID] = @p2;SELECT @@ROWCOUNT;INSERT INTO [Categories] ([CategoryID], [CategoryName])VALUES (@p3, @p4),(@p5, @p6);',N'@p0 int,@p2 int,@p1 nvarchar(4000),@p3 int,@p4 nvarchar(4000),@p5 int,@p6 nvarchar(4000)',@p0=2,@p2=3,@p1=N'Accessory',@p3=4,@p4=N'Fragnance',@p5=5,@p6=N'Sports'

正如您所看到的,有单个DELETEUPDATEINSERT语句,但被组合成一个单独的SQL语句。这里是SQL Server Profiler的屏幕截图:

Entity Framework Core 批处理语句是什么

在EF 6的中会发生什么?嗯,您猜对了。您可以通过 SQL Profiler 看到在数据库上执行的单个语句:

Entity Framework Core 批处理语句是什么

因此,使用EF Core进行批处理可以很大程度提高应用程序的速度和性能。等等,如果大型查询(如要插入500列和100行的表)会发生什么?它会失败吗?

批处理限制取决于您的数据库提供者。例如,SQL Server查询支持的参数最大数量为2100,因此,EF Core在此范围内可以漂亮地工作,并且当批处理限制超出数据库提供程序范围时,将分批查询。但是,在一个查询中批处理所有内容有时不一定是个好方式。有没有办法禁用批处理?

如何禁用批处理

是的,您可以禁用批处理。要禁用批处理,需要修改MaxBatchSize选项,您可以在OnConfiguring方法中进行配置。

protected override void OnConfiguring(DbContextOptionsBuilder optionbuilder){   

 string sConnString = @"Server=localhost;Database=EFSampleDB;Trusted_Connection=true;";    optionbuilder.UseSqlServer(sConnString , b => b.MaxBatchSize(1)); }

这里,将最大批量大小设置为1,这意味着批处理现在只能是单条查询。换句话说,它的行为类似于EF 6,要插入3个记录,将有3个单独的插入语句。使用此选项可以定义最大批量大小。

以上是“Entity Framework Core 批处理语句是什么”这篇文章的所有内容,感谢各位的阅读!相信大家都有了一定的了解,希望分享的内容对大家有所帮助,如果还想学习更多知识,欢迎关注行业资讯频道!

内容来源网络,如有侵权,联系删除,本文地址:https://www.230890.com/zhan/148266.html

(0)

相关推荐

  • HBase协处理器加载的方式有哪些

    技术HBase协处理器加载的方式有哪些这篇文章主要介绍“HBase协处理器加载的方式有哪些”,在日常操作中,相信很多人在HBase协处理器加载的方式有哪些问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望

    攻略 2021年12月9日
  • 微信免单,周末微信支付怎么怎么能够免单

    技术微信免单,周末微信支付怎么怎么能够免单微信支付在春节期间推出摇一摇赢免单活动,意思就是如果你用微信支付就有机会获得免单奖励的,比如你在网上用微信支付买了一个月的qq音乐会员8元,用微信支付后会出现一个摇一摇获得免单机

    生活 2021年10月20日
  • 抖音刷点赞软件,抖音1000个赞多少钱

    技术抖音刷点赞软件,抖音1000个赞多少钱抖音刷点赞软件,抖音1000个赞多少钱
    第二:不断创新。一般来说抖音上能火的,刷到粉比较多的,都是比较与众不同,都是比较创新的视频,如果是比较普通的视频那只能被众人忽略,因此要

    测评 2021年11月13日
  • ios 动态gif制作(ios可以实现动画效果的几种方式)

    技术iOS的GIF动画效果怎么实现本篇文章给大家分享的是有关iOS的GIF动画效果怎么实现,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。GIF在iOS中的使

    攻略 2021年12月18日
  • PostgreSQL物理备份工具pg_rman目怎么用

    技术PostgreSQL物理备份工具pg_rman目怎么用这篇文章给大家分享的是有关PostgreSQL物理备份工具pg_rman目怎么用的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。OS:

    攻略 2021年11月25日
  • 在Ubuntu 10.10下如何安装JDK配置Eclipse及Tomcat

    技术在Ubuntu 10.10下如何安装JDK配置Eclipse及Tomcat小编给大家分享一下在Ubuntu 10.10下如何安装JDK配置Eclipse及Tomcat,希望大家阅读完这篇文章之后都有所收获,下面让我们

    攻略 2021年11月26日