找不到CreateQuery()方法

时间:2013-01-24 16:32:39

标签: c# asp.net entity-framework visual-studio-2012 createquery

我是实体框架的新手。

我无法找到以下方法CreateQuery()


enter image description here

为什么我找不到这种方法?!!

3 个答案:

答案 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获取数据。 希望对别人有帮助。