如何将IDbConnection传递给EF上下文?

dee*_*zen 8 c# asp.net-mvc entity-framework

实体框架cotext DbContext具有采用DbConnection的构造函数.为什么不用IDbConnection?

是否通常将DbConnection传递给EF上下文而不是使用默认构造函数(从App.config中读取连接字符串?)

Yuv*_*kov 4

实体框架 cotext DbContext 具有采用 DbConnection 的构造函数。为什么不使用 IDbConnection?

因为我不是 EF 团队的一员,所以我不能代表他们说什么。在我看来DbConnection,因为抽象基础已经为您提供了一些实现,所以您任何重写的类都可以“免费”获得东西。

在这里找到了一个不错的答案:

主要好处之一与版本控制有关。当 Microsoft 向提供程序添加新功能时,他们需要向开发人员公开此功能。

使用旧的仅接口方法,他们必须更改接口(但他们不会,因为接口是不可变的)以及框架中实现该接口的所有类。实现该接口的开发人员编写的任何自定义类也需要进行修改,以实现对接口的任何更改。如果他们不断添加新功能(他们会这样做),这就会变成需要更改接口或实现新接口以提供新功能的恶性循环。


通常是否将 DbConnection 传递给 EF 上下文而不是使用默认构造函数?

文档非常清楚为什么要使用此重载

使用现有连接构造一个新的上下文实例来连接到数据库。如果 contextOwnsConnection 为 false,则在释放上下文时不会释放连接。

如果您已经有一个开放的上下文并且想要传递它,您可以这样做。“这正常吗”会因每个用例而异。我自己根本没有使用过这个重载。