2017-07-26 92 views
0

我使用EFCore将数据传输到后端数据库,我为每个添加到数据集的每个特定数量的新对象调用SaveChanges,我从EFCore调试日志中注意到它将关闭连接并打开一个新的每一个我称之为SaveChanges时间:EFCore在dbcontext的生命周期中使用单个dbconnect

Microsoft.EntityFrameworkCore.Storage.Internal.SqlServerConnection|DEBUG|Opening connection to database ... 
Microsoft.EntityFrameworkCore.Storage.Internal.SqlServerConnection|DEBUG|Beginning transaction with isolation level 'Unspecified'. 
Microsoft.EntityFrameworkCore.Storage.Internal.SqlServerConnection|DEBUG|Committing transaction 
Microsoft.EntityFrameworkCore.Storage.Internal.SqlServerConnection|DEBUG|Closing connection to database... 
.... the logs repeats forever 

所以反正是有只使用一个DbContext的整个生命周期的一个连接?

+2

问题:为什么你关心连接? – DavidG

+0

答案:性能。 – fluter

+0

什么让你觉得它会更快? – DavidG

回答

5

你根本没有必要改变它的工作方式,甚至根本不用担心。默认情况下,SQL Server连接只是放回到连接池中,因此实际上它不会关闭。打开一个新的将抓住池中的下一个可用。

如果您真的想要通过设置连接字符串中的值来控制池,但除非您真的知道您在做什么,否则这些是使用的主要属性(从MSDN起):

连接生存期:如果该时间长度(以秒为单位)超过由连接生存期指定的值当连接被返回到池,将其创建时间与当前时间进行比较,并且该连接被破坏。这在群集配置中非常有用,可以强制正在运行的服务器和刚刚联机的服务器之间的负载平衡。 零值(0)将导致池连接有最大超时。

连接重置:确定从池中删除数据库连接时是否重置。对于Microsoft SQL Server 7.0版,设置为false可避免在获取连接时进行额外的服务器往返,但您必须知道连接状态(如数据库上下文)未被重置。

列表:如果事务上下文存在,则该池在自动创建线程的事务上下文中自动注册连接。

最大池大小:池中允许的最大连接数。

最小池大小:池中维护的最小连接数。

合并:如果为true,则连接从适当的池中提取,或者在必要时创建并添加到适当的池中。