私はエンティティフレームワークの初心者です。
次のメソッドCreateQuery()が見つかりません
なぜこの方法が見つからないのですか?!!
ESQLは高度なユースケースと見なされていたため、からの単純なAPIはありません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()
お役に立てれば
私はefcoreを使用していますが、sqlserverからサーバー時間を取得したいのですが、私の場合はどのアプローチも機能しませんでした。IObjectContextAdapterが認識されないため、ef6をダウンロードするように求められました。
サーバー時間を取得するための以下のステートメントを見つけました。
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からデータを取得できます。それが誰かを助けることを願っています。