我正在使用 .NET Core 依赖注入(inject)在应用程序启动期间实例化一个 SqlConnection
对象,然后我计划将其注入(inject)到我的存储库中。 Dapper 将使用此 SqlConnection
从我的存储库实现中的数据库读取/写入数据。我将对 Dapper 使用 async
调用。
问题是:我应该将 SqlConnection
作为 transient 注入(inject)还是作为单例注入(inject)?考虑到我想使用 async
这一事实,我的想法是使用 transient,除非 Dapper 在内部实现了一些隔离容器,并且我的单例范围仍将包含在 Dapper 内部使用的任何范围内。
在使用 Dapper 时,是否有任何关于 SqlConnection 对象生命周期的建议/最佳实践?是否有任何我可能遗漏的注意事项?
提前致谢。
最佳答案
如果您将 SQL 连接作为单例提供,您将无法同时处理多个请求,除非您启用 MARS,这也有其局限性。最佳做法是使用 transient SQL 连接并确保它被正确处理。
在我的应用程序中,我将自定义 IDbConnectionFactory
传递给用于在 using
语句中创建连接的存储库。在这种情况下,存储库本身可以是单例的,以减少堆上的分配。
关于c# - Dapper with .NET Core - 注入(inject)的 SqlConnection 生命周期/范围,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42937942/