0

私はentityframework 5を使用しています.linqを使用してデータベースからオブジェクトをロードすると、結果オブジェクトがdbcontextに保存されますが、ExecuteStoreQueryを使用して同じオブジェクトをロードしたい場合、結果はdbに保存されません環境。

これは期待される動作ですか?または、2番目の方法のクエリcon dbcontextの結果を維持するにはどうすればよいですか?

第 1 の方法 (LINQ):

var obj = dbcontext.table.where(o=> o.id == queryId).FirstOrDefault();

2 番目の方法 (ExecuteStoreQuery):

var obj = dbcontext.executestorequery("select * from...").FirstOrDefault();
4

1 に答える 1

1

Databasein DbContext API にはありませんExecuteStoreQuery- それは からのメソッドですObjectContext。DbContext API はSqlQueryメソッドのみを使用します。

Linq クエリで得られるのと同じ動作をネイティブ SQL で取得したい場合は、次を使用する必要があります。

var obj = dbcontext.table.SqlQuery("select * from ... ");

SqlQueryインスタンスで直接呼び出す場合とDbContextインスタンスで呼び出す場合の違いDbSet<>は、最初のケースでは結果がアタッチされず、コンテキストによって追跡されますが、2 番目のケースではアタッチされることです。

ObjectContext API を使用している場合は、オーバーロードされたバージョンのエンティティ セットを使用ExecuteStoreQueryし、エンティティ セットの名前を 2 番目のパラメーターとして渡す必要があります。そうしないと、コンテキストによって結果が追跡されません。

于 2012-12-12T12:35:11.463 に答える