我是实体框架的新手。
我找不到以下方法CreateQuery()
为什么我找不到这个方法?!
由于 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;
}
}
首先,这不是 EF 中查询的原生解决方案。请尽可能多地学习 LINQ,然后,如果您知道您确实需要替代方法,请回退到 CreateQuery()
但是,您可以通过以下方式获得所需的结果System.Data.Entity.Core.Objects.IObjectContextAdapter
:
(context as IObjectContextAdapter).ObjectContext.CreateQuery
此外,您可以使用以下命令运行 sql 命令:
context.Database.SqlQuery<>()
和context.Database.ExecuteSqlCommand()
希望这可以帮助
我正在使用 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 获取数据。希望它可以帮助某人。