2015-04-12 80 views

回答

4

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

因为我不是英孚团队的一员,所以我不能代表他们做任何事情。在我看来,像DbConnection,因为抽象基础已经为你做了一些实现,所以你的任何overriden类都可以“免费”获取。

我找到了一个体面的答案here

的一个主要好处有版本做。随着微软向供应商增加新功能,他们需要向开发人员公开此功能。

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


是否正常来的DbConnection传递给EF背景下,而不是使用默认的构造函数?

docs是为什么你会使用此重载很清楚:

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

如果你已经有了一个开放的上下文并且想要通过它,你可以这样做。 “是否正常”将因用例不同而异。我自己根本没有使用过载。