实体框架DefaultConnectionFactory被忽略

Mat*_*ton 2 entity-framework ef-code-first entity-framework-5

我正在使用带有Code First的Entity Framework 5。我编写了一个自定义变量IDbConnectionFactory,希望用于类的所有连接DbContext,因此在应用程序生命周期的早期,在完成任何数据库工作之前,我会调用

Database.DefaultConnectionFactory = new MyConnectionFactory();
Run Code Online (Sandbox Code Playgroud)

但是,MyConnectionFactory.CreateConnection从未被调用过,这向我暗示了EF将其改回了-但是调试器显示MyConnectionFactory在运行了几个查询之后它仍然是a 。由于某种原因,它只是没有使用它。

DbContext是通过从app.config文件中传递连接字符串的名称来初始化的,而这些连接字符串确实指定了显式提供程序(确实必须如此),所以我想知道这是否导致连接的每次连接覆盖基于连接字符串的工厂。是否会发生这种情况,我是否可以在不注册一个全新的提供程序的情况下停止它(尽管也许这样做并不难吗?)。

我在网上看到的所有内容(在各种app.config示例中都被defaultConnectionFactory标记所遮盖)建议您可以将其更改IDbConnectionFactory为您选择的实例,并且可以正常工作,但我的行为却不行。

这样做的目的是允许我在打开新连接时运行一组特定的SQL语句,因此该问题的第二部分将是有人知道更好的方法吗?

小智 5

我知道这并不理想,但这对我有用:

public class DBBase : DbContext
{
    public DBBase(string nameOrConnectionString)
        : base(Database.DefaultConnectionFactory.CreateConnection(nameOrConnectionString), true)
    {
    }
    // ...
}
Run Code Online (Sandbox Code Playgroud)