企業の枠組み:があるので、チェックの場合はスコンテキストオブジェクト?
-
21-08-2019 - |
質問
状況:オブジェクトのセッションから過去の文脈できないとして設定する別のオブジェクトの親からその他のオブジェクト、まったく新しいコンテキスト
言いたユーザのセッションしたことから取得したコンテキスト現在のページの固,そのコンテキストは解散し、新しいコンテクストを作ります。
someUser = context.First(user => user.id == id);
Session["SomeUser"] = someUser
...
context.Dispose();
ページの再読み込み
userAddress = new UserAddress();
userAddress.User = (User)Session["SomeUser"]; //BOOM NOT IN SAME CONTEXT
何をしたいと思ってい:
if(!context.SomeUsers.Contains((User)Session["SomeUSer"]) //Only check context NOT DATABASE
{
//Reload from database
//Set user in session to new object
}
この場合、オブジェクトのセッションに所属していない現在のコンテキスト表記にしてからデータベースでは"所有"より、同じコンテキストとして他のオブジェクトの現在のコンテキスト(を使ってコンテキストの場合)
更新
なかったのでここまでの一時的で入手できるようこの問題を修正するには:
Int32 sessionUser = sessionUser .UserID;
var userCheck = EntityContext.Context.ChatUsers.First(item => item.UserID == returnValueID);
if (userCheck != sessionUser)
{
sessionUser = userCheck;
}
その考え方としては、参照オブジェクトが次のどれかの場合にセッション(sessionUser)同一の"コンテキスト現場の作品だけます。初めてのコンテキストが作成されたときには、ヒットのデータベースを掴みます。一度、これでは同じではありませんのsesionUserは、ユーザーのコンテキスト次回る場合にチェックを入れると、sessionUserのuserToCheckは同じです。
まだまだ問題は:
var userCheck = EntityContext.Context.ChatUsers.First(item => item.UserID == returnValueID);
常にヒットのデータベースです。これにあてはまるわけではない。
以上更新
遅この答えです。すっかり忘れるこのルールに関連付けます:
xは財産の種類ObjectQuery.場を実行するとObjectQueryで 常時のバック店です。うことになったと言われています。したくない場合 を実行するデータベースのクエリー、そして うObjectQuery.
解決
Okたします。
ChatUser userCheck = (ChatUser)EntityContext.Context.GetObjectByKey(returnValue.EntityKey);
if(userCheck != returnValue)
{
sessionUser = userCheck;
}
のGetObjectByKey方法であるとして記述:
GetObjectByKeyみを取り出すには オブジェクトは、指定された EntityKeyからObjectStateManager.オブジェクトが次のどれかの場合、現在はいない のオブジェクトのコンテキストの問い合わせ 実行されるための オブジェクトからのデータソースです。
た試験では何かと言います。最初の時間を通じて(コンテキストを作成した要リクエスト)がヒットしたデータベースのチェックがオブジェクトからのセッション。には同じではありませんので設定しますsessionUserの新しいオブジェクトが現在のsessionUserのコンテキストです。次回のGetObjectByKey方法だけをチェックをトコンテキストとしてプロファイラなどのデータベースの相互作用).次.
他のヒント
なぜならずチェックのユーザid"はどのようになりますか。
context.Users.Any(user => user.Id = ((User)session["SomeUser"]).Id)
することがで切り離し、ユーザオブジェクトからのコンテキストに添付して新しいコンテキストを使用。Attach().