【发布时间】:2019-06-19 02:09:44
【问题描述】:
在一个 .NET core web api 应用程序中,我在一个函数中使用 ef core,我必须运行一些原始 sql,然后当我尝试在原始 sql 之后使用上下文时它失败了。
上下文从控制器传递到逻辑文件(实际业务 代码)是私有的只读 我尝试再次打开连接,但失败了。
DbConnection conn = _context.Database.GetDbConnection();
using (conn)
{
await conn.OpenAsync();
using (DbCommand cmd = conn.CreateCommand())
{
//Raw SQL
}
}
Table1 t1 = await _context.Table1
.Where(i => i.id == 1)
.SingleOrDefaultAsync();
一切正常,直到应用程序到达Table1 t1 行,然后我得到错误
我得到的错误是
InvalidOperationException: The ConnectionString property has not been initialized.
System.Data.SqlClient.SqlConnection.PermissionDemand()
编辑
我想问是否有最佳实践方法来运行原始 SQL,返回未映射到实体的数据,然后继续使用 EF Core。有时我的原始 SQL 也只返回一个字符串或十进制值
编辑#2
感谢您的帮助,我将使用 Ivan Stoev
更新的工作代码
DbConnection conn = _context.Database.GetDbConnection();
await context.Database.OpenConnectionAsync();
using (DbCommand cmd = conn.CreateCommand())
{
//Raw SQL
}
context.Database.CloseConnection();
Table1 t1 = await _context.Table1
.Where(i => i.id == 1)
.SingleOrDefaultAsync();
【问题讨论】:
-
至于返回的数据未映射到实体,请查看查询类型。 docs.microsoft.com/en-us/ef/core/modeling/query-types
标签: c# entity-framework-core ef-core-2.2