实体框架事务:什么是更好的性能方面
本文关键字:更好 性能 方面 什么 框架 事务 实体 | 更新日期: 2023-09-27 17:53:52
哪个性能更好:
using (GADEEntities context = new GADEEntities(_connectionString))
{
using (TransactionScope transaction = new TransactionScope())
{
AddToContext1(context);
AddToContext2(context);
AddToContext3(context);
...
context.SaveChanges();
transaction.Complete();
}
}
或
using (GADEEntities context = new GADEEntities(_connectionString))
{
using (TransactionScope transaction = new TransactionScope())
{
AddToContext1(context);
context.SaveChanges();
AddToContext2(context);
context.SaveChanges();
AddToContext3(context);
context.SaveChanges();
...
transaction.Complete();
}
}
在任何时候,这都可能在客户端机器上转换成5000多个插入到数据库中的操作。两种方式有什么不同吗?
很可能您的第一个版本总是更快,这取决于AddToContext
的确切功能。如果您的AddToContext
方法向上下文添加单个或仅几个新对象,那么肯定会快得多。在每次插入(也可能是更新和删除)之后调用SaveChanges
会大大降低性能。
下面是一个类似问题的一些度量:
插入实体框架的最快方法
你设置的方式,我不认为有什么显著的区别。无论哪种方式,数据都可以传输,这才是真正的瓶颈。
差别很大,因为第二个版本大错特错。
你写这段代码是干什么的:
AddToContext1(context);
context.SaveChanges(false);
您将记录添加到添加状态的上下文,并让上下文将记录插入到数据库中,但同时您说:"让数据处于添加状态"。
如果你调用这个会发生什么:
AddToContext2(context);
context.SaveChanges(false);
添加另一条记录到已添加状态的上下文,并让上下文将所有已添加状态的记录插入数据库=第一条记录将再次添加
如果AddToContext
实际上执行更新并不重要,因为它将简单地再次执行DB命令。因此,如果您有5000条记录,您将插入或更新第一个记录5000次!
如果你想使用第二个版本,你仍然必须在每次保存时接受更改。
顺便说一句。SaveChanges
过载接受bool在EFv4中已过时。