CodeFirst:指定的命名连接在配置中未找到。

7

我创建了一个测试项目来测试我的查询,一切都很顺利,除了当我尝试测试使用 Entity Connection 的方法时,出现以下异常:

The specified named connection is either not found in the configuration, not intended to be used with the EntityClient provider, or not valid.

在此输入图片描述


我在启动项目TestQuery的app.config文件中的连接字符串如下:

 <connectionStrings>
    <add name="DataLayer.Context" connectionString="Data Source=.;Initial Catalog=TestQ;Integrated Security=True" providerName="System.Data.SqlClient"/>
 </connectionStrings>

所有使用linq to entity的方法都能很好地工作并获取数据,除了这个方法?

2
“.” 不是“数据源”有效的值? - masa
@masa: 这是我的本地数据库! - Anyname Donotcare
请复制并粘贴代码,而不是图像。 - Gert Arnold
1
我刚刚看到你提供了赏金。但与此同时,我仍然不清楚我还能为你做些什么。你显然正在执行一个实体SQL命令。我向你展示了更好的方法,因为Entity Command不接受你提供给它的标准连接字符串,只接受包含元数据的实体连接字符串(在使用objectContext.CreateQuery时会自动获取)。你没有执行本地SQL。而且Entity Command 无法执行本地SQL - Gert Arnold
2个回答

5
这不是执行实体SQL命令的正确方式。你应该使用以下方法:
// If you have a DbContext instance:
var objectContext = ((IObjectContextAdapter)dbContext).ObjectContext;
var query = objectContext.CreateQuery<Crop>(eSQL);
var result = query.ToList();

非常感谢,连接初始化时出现异常,而不是查询本身。您能看一下连接字符串吗? - Anyname Donotcare
这对我有用,但这不是我所询问的内容,我询问的是“使用实体框架运行本地SQL”,就像“ADO.net”一样,我想在这种情况下直接与SQL客户端交流,我在互联网上搜索并找到了这种方法,但我遇到了上述异常。 - Anyname Donotcare
但是你在这里得到的是一个EntityCommand,只能运行Entity SQL,而不能运行本地SQL。我认为命名连接只提供正常的连接字符串,而不是实体连接字符串(包含元数据)。你应该通过DbContext.Database.SqlQueryDbContext.Database.ExecuteSqlCommand来运行原始SQL。 - Gert Arnold
是的,你说得对。我使用了entity sqlentity command,但是在连接字符串本身中出现了异常。 - Anyname Donotcare
我知道。问题在于你的连接字符串不是实体连接字符串。你必须构建一个包含元数据的实体连接字符串。但是像上面那样运行E-SQL会更容易。 - Gert Arnold

0

尝试重命名您的连接名称,例如: "TestConn"

using(var con = new EntityConnection("name=TestConn"))

另一个尝试的方法是从app.config获取连接字符串,然后将其传递给EntityConnection的构造函数。

string cs = ConfigurationManager.ConnectionStrings["TestConn"].ConnectionString
var eConnection = new EntityConnection(cs);

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接