繁体   English   中英

EFCore在dbcontext的生存期内使用单个dbconnect

[英]EFCore use a single dbconnect for the lifetime of dbcontext

我正在使用EFCore将数据传输到后端db,我为添加到数据集中的每个特定数量的新对象调用SaveChanges ,我从EFCore调试日志中注意到,它将每次我调用时关闭连接并打开一个新对象SaveChanges

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的整个生命周期中是否只使用一个连接?

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

如果确实需要,可以通过在连接字符串中设置值来控制池,尽管我不建议这样做,除非您真的知道自己在做什么,否则这些都是使用的主要属性(来自MSDN ):

Connection Lifetime :将连接返回到池时,会将其创建时间与当前时间进行比较,如果该时间跨度(以秒为单位)超过Connection Lifetime指定的值,则连接将被销毁。 这在群集配置中用于强制正在运行的服务器和刚刚联机的服务器之间实现负载平衡。 零(0)值将导致池连接具有最大超时。

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

Enlist :为true时,如果存在事务上下文,则池管理器会自动在创建线程的当前事务上下文中加入连接。

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

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM