【发布时间】:2015-06-17 22:56:42
【问题描述】:
Entity Framework cotext DbContext 具有采用 DbConnection 的构造函数。为什么不是 IDbConnection?
是否通常将 DbConnection 传递给 EF 上下文而不是使用默认构造函数(从 App.config 读取连接字符串?)
【问题讨论】:
标签: c# asp.net-mvc entity-framework
Entity Framework cotext DbContext 具有采用 DbConnection 的构造函数。为什么不是 IDbConnection?
是否通常将 DbConnection 传递给 EF 上下文而不是使用默认构造函数(从 App.config 读取连接字符串?)
【问题讨论】:
标签: c# asp.net-mvc entity-framework
实体框架 cotext DbContext 具有采用 DbConnection 的构造函数。为什么不是 IDbConnection?
由于我不是 EF 团队的一员,我不能代表他们说任何话。在我看来,就像DbConnection,因为一个抽象基础已经为你做了一些实现,所以你任何被覆盖的类都可以“免费”获得东西。
我找到了一个不错的答案here:
其中一个主要好处与版本控制有关。随着 Microsoft 向提供程序添加新功能,他们需要将此功能公开给开发人员。
使用旧的仅接口方法,他们将不得不更改接口(但他们不会因为接口是不可变的)和框架中实现接口的所有类。由开发人员编写的实现接口的任何自定义类也需要修改以实现对接口的任何更改。如果他们不断添加新功能(他们将这样做),这将成为需要更改接口或实施新接口以提供新功能的恶性循环。
是否通常将 DbConnection 传递给 EF 上下文而不是使用默认构造函数?
docs 非常清楚您为什么要使用此重载:
使用现有连接构造一个新的上下文实例以连接到数据库。如果 contextOwnsConnection 为 false,则在释放上下文时不会释放连接。
如果您已经有一个开放的上下文并且想要传递它,您可以这样做。 “是否正常”会因每个用例而异。我自己根本没有使用过这个重载。
【讨论】: