16

我是实体框架的新手。

我找不到以下方法CreateQuery()


在此处输入图像描述

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

4

3 回答 3

21

由于 ESQL 被认为是一种高级用例,因此没有来自DbContext. 您可以访问ObjectContext支持您DbContext做您想做的事:

((IObjectContextAdapter)context).ObjectContext.CreateQuery<Person>("esql..")

相关:http ://thedatafarm.com/blog/data-access/accessing-objectcontext-features-from-ef-4-1-dbcontext/

正如那里所建议的,您还可以ObjectContext向上下文类添加一个方法(或属性):

public class BloggingContext : DbContext
{
    public DbSet<Blog> Blogs { get; set; }
    public DbSet<Post> Posts { get; set; }

    public ObjectContext ObjectContext()
    {
        return (this as IObjectContextAdapter).ObjectContext;
    }
}
于 2013-02-03T12:35:19.083 回答
7

首先,这不是 EF 中查询的原生解决方案。请尽可能多地学习 LINQ,然后,如果您知道您确实需要替代方法,请回退到 CreateQuery()

但是,您可以通过以下方式获得所需的结果System.Data.Entity.Core.Objects.IObjectContextAdapter

(context as IObjectContextAdapter).ObjectContext.CreateQuery

此外,您可以使用以下命令运行 sql 命令:

context.Database.SqlQuery<>()context.Database.ExecuteSqlCommand()

希望这可以帮助

于 2013-02-02T14:27:40.457 回答
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 获取数据。希望它可以帮助某人。

于 2020-09-19T21:27:31.737 回答