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

时间:2015-04-12 16:21:13

标签: c# asp.net-mvc entity-framework

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

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

1 个答案:

答案 0 :(得分:4)

  

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

由于我不是EF团队的成员,我不能代表他们说什么。在我看来像DbConnection,因为抽象基础已经为你做了一些实现,所以你任何覆盖类都可以“免费”获取东西。

我找到了一个不错的答案here

  

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

     

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


  

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

docs非常清楚为什么要使用此重载:

  

使用现有连接构建新的上下文实例以连接到数据库。如果contextOwnsConnection为false,则在处理上下文时不会处理连接。

如果您已经有一个开放的上下文并希望传递它,您可以这样做。 “这是正常的”会因每个用例而异。我本人根本没有使用过载。