Entity framework EF5连接字符串错误仅在生产中出现

Entity framework EF5连接字符串错误仅在生产中出现,entity-framework,Entity Framework,在我的开发机器上,一切都可以完美地工作。甚至使用生产连接值(因此,即使我从dev机器连接到生产)。我不认为这是一个权限问题,因为我使用的是相同的凭据,只是使用EF5而不是linq2sql,就像以前版本的服务一样。此外,sql探查器不会显示失败的登录尝试 连接字符串为: 数据源=MYSQLSERVER;数据库=MYDB;综合安全=真实 错误是: 键“attachdbfilename”的值无效 我已将传递到dbContext代码中的连接字符串记录在日志中: Database.Connection.C

在我的开发机器上,一切都可以完美地工作。甚至使用生产连接值(因此,即使我从dev机器连接到生产)。我不认为这是一个权限问题,因为我使用的是相同的凭据,只是使用EF5而不是linq2sql,就像以前版本的服务一样。此外,sql探查器不会显示失败的登录尝试

连接字符串为:

数据源=MYSQLSERVER;数据库=MYDB;综合安全=真实

错误是:

键“attachdbfilename”的值无效

我已将传递到dbContext代码中的连接字符串记录在日志中:

Database.Connection.ConnectionString = settings.DbConnectionHourly;

这是一个从我的真实dbContext(打包在dll中)继承的类,设置被注入。同样,这在开发中有效,但在生产中不起作用(Server2008R2,IIS7.5,framework.4)。

结果表明实体框架试图变得非常智能,但它给出了一个非常不智能的错误消息。因此,按照惯例,如果您不将上下文名称作为构造函数传入,实体框架将采用类名作为连接字符串的名称。它还将做什么(我不知道),是在开发中,它将自动连接到VisualStudio并使用内置的sqlExpress创建一个模式。所以在开发过程中,一切都起了作用,因为这个“automagic”的创建成功了,而且由于我后来改变了与另一个数据库的连接,我对EF在幕后做的事情一点也不知道(EF做了错误的事情,但最终结果起了作用)

但是,当应用程序投入生产时,Web服务器上没有sqlexpress或任何数据库,因此automagic连接/创建序列失败。现在,如果错误消息中有任何有用的信息,这将是显而易见的。但由于我从未设置过“attachdbfilename”,也没有告诉我“attachdbfilename”的值是什么,也没有告诉我任何上下文,也没有告诉我它试图做什么,这使得弄清楚这一点变得更具挑战性

解决方法很简单:

public HourlyContext(ISettingsWrapper settings)
        : base(settings.DbConnectionHourly)
    { }

而不是在创建上下文后设置连接(创建过程将立即尝试使用内置的约定/默认值发挥其魔力),现在,我立即通过构造函数进行设置。

您确定服务器上web.config中的连接字符串正确,并且没有在某个地方覆盖该设置吗?可能还需要检查您的web.config transforms.FYI,Oracle的MySQL无法有效处理Oracle的MySQL EF提供程序生成的查询。使用MariaDb或Percona的MySQL服务器以获得可接受的性能。是的,在我的应用程序中,我添加了一行记录连接字符串,然后将其传递到上下文中,这正是我所期望的。