我正在制作一个小型库(DLL)来管理用户及其角色/权限。该计划是能够将此dll添加到MVC项目并能够操纵用户/角色/等。所有数据都驻留在SQL数据库中。
我正在使用实体框架进行数据访问。
所以当我初始化一个新的RoleManager(这是我正在制作的lib中的主类的名称)时,我提供了一个像这样的connectionString:
RoleManager roleManager = new RoleManager(string connectionString);
然后在构造函数中我这样做:
db = new RoleManagerEntities(connectionString); //This is the EntityFramework
我正在尝试提供此连接字符串(以及许多其他字符串)
"metadata=res://*/RoleManager.csdl|res://*/RoleManager.ssdl|res://*/RoleManager.msl;provider=System.Data.SqlClient;provider connection string='Data Source=localhost;Initial Catalog=Login;Integrated Security=True;Connection Timeout=60; multipleactiveresultsets=true'"
我收到以下错误:
The specified named connection is either not found in the configuration, not intended to be used with the EntityClient provider, or not valid.
这个问题是我尝试从我的新项目中实例化EF而不提供连接字符串而且我的应用程序配置中没有任何内容,因为它默认为。太糟糕了,我现在无法删除它。
答案 0 :(得分:8)
只需将DLL配置文件中的连接字符串信息复制到可执行配置文件即可。
答案 1 :(得分:6)
基本上你试图通过这个ObjectContext实例化一个ObjectContext Constructor (String)而不传递其预期格式的字符串参数,这就是问题所在。
这是你需要做的:
1.首先在您的“测试项目”app.config中创建一个条目,因为这是CLR在运行时查找连接字符串的位置。
<configuration>
<connectionStrings>
<add name="RoleManagerEntities" connectionString="metadata=res:///RoleManager.csdl|res:///RoleManager.ssdl|res://*/RoleManager.msl;provider=System.Data.SqlClient;provider connection string='Data Source=localhost;Initial Catalog=Login;Integrated Security=True;Connection Timeout=60; multipleactiveresultsets=true'" />
</connectionStrings>
</configuration>
db = new RoleManagerEntities("name=RoleManagerEntities");
答案 2 :(得分:0)
构造函数可能正在web.config的connectionStrings设置中查找连接字符串,其中包含您将其作为参数传递的名称。
所以如果你打电话:
db = new RoleManagerEntities("Foobar");
正在寻找:
我不肯定这是解决方案,但这就是错误消息似乎表明的内容。
答案 3 :(得分:0)
我不是EF的专家,但我不认为连接字符串是有效的。尝试:
metadata=res://*;provider=System.Data.SqlClient;provider connection string='Data Source=localhost;Initial Catalog=Login;Integrated Security=True;Connection Timeout=60; multipleactiveresultsets=true'