所以,我已经按照ADO.NET团队博客的指示尝试制作一个小型测试项目。 我仔细检查了一切。它似乎不起作用,并一直说连接字符串丢失。
http://blogs.msdn.com/b/adonet/archive/2011/03/15/ef-4-1-model-amp-database-first-walkthrough.aspx
步骤。 1 构建此UserModels.dll。在dll,App.Config文件中,edmx生成了这个连接字符串:(在创建它时点击'test'按钮,它成功连接,并从'UserDatabase'生成所有表的edmx图)
<?xml version="1.0" encoding="utf-8"?>
<configuration>
<connectionStrings>
<add name="UserModelsContainer" connectionString="metadata=res://*/UserModels.csdl|res://*/UserModels.ssdl|res://*/UserModels.msl;provider=System.Data.SqlClient;provider connection string="data source=MyDesktop\SQL2008;initial catalog=UserDatabase;integrated security=True;multipleactiveresultsets=True;App=EntityFramework"" providerName="System.Data.EntityClient" />
</connectionStrings>
</configuration>
第2步。 然后我做了一个测试项目:
class UnitTetst1 ....
TestMethod1()....
using (var db = new UserModelsContainer()) {
int i = db.Users.Count(); // <---expecting '0' for a new db, but I get an exception
}
---------问题在这里-----------------
步骤3.运行测试。然后我得到一个错误InvalidOperationException,如下所示:
"No connection string named 'UserModelsContainer' could be found in the application config file."
好像DbContext不知道从App.Config那里拿起connectionStrings到哪里了?
请帮忙~~
答案 0 :(得分:7)
运行程序时,正在运行的.exe文件的app.config被读取。永远不会使用.dll的app.config。由于UserModel.dll是一个DLL,因此您运行的某个地方必须有.exe(或网站)。将连接字符串放在该exe的app.config中(或者如果它是web.config中的网站)。
答案 1 :(得分:5)
当我尝试从“包管理器控制台”执行update-database命令时遇到此问题。我有一个单独的项目,我的代码第一个数据访问层,另一个项目,我的Web项目等
我使用以下命令:“update-database -projectname MYPROJECTDANAME -CONNECTIONSTRINGNAME CONNECTIONSTRING -Force”
因此它指向了我的MYPROJECTDANAME项目,但它从您指定的启动项目中获取了连接字符串名称。因此,请确保已标记为启动项目的项目具有所需的连接字符串。