指定的命名连接在configuration中找不到,不打算与EntityClient提供程序一起使用,或者无效
我有一个entity framework对象,当我将它添加到我的项目, connectionstring
entitycontext
被添加到connectionstring
entitycontext
节app.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.config
和web.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.config
和web.config
之后,你只需在.edmx(Model.context.cs)文件中添加一个重载的构造函数,现在你有两个构造函数默认和另一个你刚刚添加(超载)。
public YourEntityName(string connString) : base(connString) { }
- 如何计算关联实体而不在entity framework中获取它们
- ObjectStateManager中已经存在具有相同键的对象。 ObjectStateManager不能使用同一个键跟踪多个对象
- entity framework中的SqlException – 不允许新的事务,因为会话中还有其他线程正在运行
- 多对多的映射表
- 在逆向工程数据库时改进导航属性名称
- 将entity framework对象序列化为JSON
- 如何重命名entity framework5代码首先迁移数据库列而不丢失数据?
- DropDownlist或DropDownListFor Html助手之间的区别
- Code First – Data Annotations还是Fluent API更好?