答案 0 :(得分:19)
由于ESQL被认为是高级用例,因此DbContext
没有简单的API。您可以访问支持ObjectContext
的{{1}}来执行您想要的操作:
DbContext
相关:http://thedatafarm.com/blog/data-access/accessing-objectcontext-features-from-ef-4-1-dbcontext/
根据那里的建议,您还可以向上下文类添加方法(或属性)((IObjectContextAdapter)context).ObjectContext.CreateQuery<Person>("esql..")
:
ObjectContext
答案 1 :(得分:7)
首先,这不是EF中查询的本机解决方案。请尽可能多地学习LINQ然后,如果你知道你真的需要替代方法,那就回到CreateQuery()
但是,你可以通过这样的方式获得你想要的结果System.Data.Entity.Core.Objects.IObjectContextAdapter
:
(context as IObjectContextAdapter).ObjectContext.CreateQuery
此外,您可以使用以下命令运行sql命令:
context.Database.SqlQuery<>()
和context.Database.ExecuteSqlCommand()
希望这有帮助
答案 2 :(得分:0)
我正在使用ef core,我想从sqlserver获取服务器时间,而在我的情况下,没有一种方法有效。无法识别IObjectContextAdapter,它要求我下载ef 6。
我发现以下声明可以获取服务器时间:
private DateTime GetServerTime()
{
using (var db = new DbContext())
{
DbConnection connection = db.Database.GetDbConnection();
connection.Open();
DbCommand cmd = connection.CreateCommand();
cmd.CommandText = "SELECT GETDATE()";
return (DateTime)cmd.ExecuteScalar();
}
}
您可以使用此方法创建任何sql语句并从db获取数据。 希望对别人有帮助。