指定的命名连接在configuration中找不到,不打算与EntityClient提供程序一起使用,或者无效

我有一个entity framework对象,当我将它添加到我的项目, connectionstring entitycontext被添加到connectionstring entitycontextapp.config中,但是当我想要创build新的entitycontext并使用此connectionstring entitycontext ,出现此错误

我怀疑你的问题来自于你的解决scheme中有多个项目,而包含你的entity framework的东西,包括edmx文件, edmx解决scheme的启动项目。 在这种情况下,即使EF app.config项目中存在连接string,CLR在运行时仍然无法find它。 例如,如果您的解决scheme中有一个网站和一个EF项目,则需要将连接string从EF项目的app.config复制到您网站的web.config 。 基本上,任何连接string数据都应该存在于CLR从CLR启动的项目的configuration文件(即您的启动项目)中。 如果这不是你的情况,那么只要打开你的edmx文件,右键单击它的表面,select属性并复制连接string,并将其粘贴到你的app.config连接string部分。 这样你可以确保你的configuration中有正确的。

编辑:
正如您在ObjectContext构造函数的Documenation中所看到的,第一个参数是创buildEDM时生成的代码的连接string名称。 如果不知何故连接string的名称发生了改变,您只需右键单击您的模型并select“从数据库更新模型…”,然后按照向导更新您的configuration和devise器以反映此更改。

您需要将app.config中的连接string复制到您的web.config中,或将整个文件复制到显示输出的项目。 这是消费框架的条件之一。

我遇到这个问题,当我试图把我的自定义数据库逻辑的.dll被我的解决scheme中的多个项目使用。

虽然.dll具有正确的app.config文件,但它不起作用。 entity framework需要.exe的app.config中的连接信息。 复制信息到那里工作得很好。

Morteza将连接string直接粘贴到.edmx中的解决scheme对我来说不起作用,因为它不会让我粘贴这个值 – 尽pipe这正是我想要做的。

我有一个变化,没有人似乎掩盖。

我有一个主要的项目与几个模型,一个testing项目包含unit testing。 testing项目正在工作,但随后停止了OP中提到的错误。 我没有做任何重命名或移动的EDMX文件。

很多build议提到比较.config文件,但我的项目没有。

最后,我将主项目中的app.config文件复制到我的testing项目中,然后运行。 无论这是否是正确的步骤,或者在添加其他模型时会出现可维护性问题,我不知道,但至less我的unit testing现在再次正确运行。

嗨,我有这个问题,这使我疯了。 无论如何,最后我找出了问题所在。 首先你要做的是确保app.configweb.config中的connectionstrings app.config是相同的。 然后,您必须双击.edmx文件,以便可以看到表格。 一旦你点击桌子附近的任何地方,而不是在桌子上,并去属性。 从下拉列表中selectConceptualEntityModel并search实体容器名称,并记住它。

接下来转到edmx文件的devise器并打开构造函数。 (devise者是edmx文件的子文件夹)构造函数应该在BASE参数中有两个参数

 public DBEntities() : base("name=DBEntities", "DBEntities") { this.ContextOptions.LazyLoadingEnabled = true; OnContextCreated(); } 

这是其中之一。 第一个参数应该包含.edmx文件所在的项目文件的名称。第二个参数必须具有前面提到的属性中的实体容器名称。 不要忘记安排所有的构造函数: base("", "")

至less这是我的问题,我的问题就这样解决了。 我希望你能像这样解决你的问题。

尽pipeMorteza Manavi的答案确实解决了这个问题,但另一个解决scheme是dynamic构build连接string并将其传递给ObjectContext的构造函数:

 public static string CreateConnectionString() { var assemblyPath = Assembly.GetExecutingAssembly().Location; string assemblyLocation = Path.GetDirectoryName(assemblyPath); string dbPath = Path.Combine(assemblyLocation, "YourDatabase.sdf"); var sqlBuilder = new SqlConnectionStringBuilder { DataSource = dbPath }; var entityBuilder = new EntityConnectionStringBuilder { ProviderConnectionString = sqlBuilder.ConnectionString, Provider = "System.Data.SqlServerCe.3.5", Metadata = @"res://*/YourModel.csdl| res://*/YourModel.ssdl| res://*/YourModel.msl" }; return entityBuilder.ToString(); } // Snip... var entityContext = new YourObjectContext(CreateConnectionString()); 

这消除了将连接string信息复制到您的启动项目的app.config,至less在我的情况下,是不可取的。

我忘了在连接string中添加providerName =“System.Data.EntityClient”作为属性。 这导致了这个错误

 <add name="connectionName" connectionString="metadata=res://*/..." providerName="System.Data.EntityClient" /> 

代替

 <add name="connectionName" connectionString="metadata=res://*/..." /> 

我刚刚发现,如果一个应用程序是从VS2010的两个级别从网站根创build的IIS这个错误会发生。 不知道为什么会发生,需要调查更多。 例如,如果您的应用程序位于以下path: /admin/advertiser ,那么如果您的IIS站点中没有/admin虚拟目录,则会显示错误。

我所做的只是在我的.../intepub/wwwroot错误消失后创build了一个空的admin目录。

你会发现,你将无法开始debugging,直到你做上述步骤。

我们在过去的团队中遇到了这个问题,但是花了一些时间来记住,但是这也正是我们之前修正的问题。

我有一个类库,不想与EF一起工作。 当我从我的类libraray复制app.config(或只是连接string部分)到exe项目连接工作正常! 预计configuration文件可能与exe项目在同一个文件夹中,因此找不到。 所以当在一个类库项目中使用一个configuration文件时,总是要提高警觉!

我正在使用n'tier架构,并得到了同样的问题,但这一个帮助我。这将有助于你。 首先你有相同的connection string ,你可以访问数据库,你可以访问数据库,就像在app.configweb.config之后,你只需在.edmx(Model.context.cs)文件中添加一个重载的构造函数,现在你有两个构造函数默认和另一个你刚刚添加(超载)。

  public YourEntityName(string connString) : base(connString) { }