【问题标题】:Entity Framework DefaultConnectionFactory being ignored实体框架 DefaultConnectionFactory 被忽略
【发布时间】:2012-12-05 13:54:10
【问题描述】:

我正在使用带有 Code First 的 Entity Framework 5。我编写了一个自定义的IDbConnectionFactory,我想将它用于我的DbContext 类建立的所有连接,所以在应用程序生命周期的早期,在完成任何数据库工作之前,我调用

Database.DefaultConnectionFactory = new MyConnectionFactory();

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

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

无论我在网上看到什么(在各种 app.config 示例中被 defaultConnectionFactory 标记所掩盖)都表明您可以将其更改为您选择的 IDbConnectionFactory 实例,它会起作用,但我的行为不正常.

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

【问题讨论】:

    标签: entity-framework ef-code-first entity-framework-5


    【解决方案1】:

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

    public class DBBase : DbContext
    {
        public DBBase(string nameOrConnectionString)
            : base(Database.DefaultConnectionFactory.CreateConnection(nameOrConnectionString), true)
        {
        }
        // ...
    }
    

    【讨论】:

    • 有点丑,但很有意义。幸运的是,我最终能够不需要这样做,但解决方案导致了许多其他问题......让我们说最终 SQL Server 实际上是问题所在。不过,如果 DefaultConnectionFactory 不那么奇怪,那就太好了。
    【解决方案2】:

    您需要获得为要使用的每个呼叫建立的连接。例如使用下面的代码。

    private static void UsingCustomConnection()
    {
        using (var conn = Database.DefaultConnectionFactory.CreateConnection("YourDbName"))
        {
            using (var context = new YourContext(conn))
            {
                context.Destinations.Add(new Destination {Name = "Colorado"});
                context.SaveChanges();
            }
        }
    }
    

    您需要在 YourContext 中进行设置

    public YourContext(DbConnection connection)
        : base(connection, contextOwnsConnection: false)
    {
    
    }
    

    【讨论】:

    • 也可以找到更多信息here
    猜你喜欢
    • 1970-01-01
    • 2014-07-17
    • 1970-01-01
    • 1970-01-01
    • 2016-08-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多