0

テーブルUsersと。を含むデータベースがありUploadsます。重要な列は次のとおりです。
Users -> UserID
Uploads -> UploadID, UserID
関係の主キーはでUsers -> UserIDあり、外部キーはUploads -> UserIDです。
LINQ to SQL、次の操作を行います。

Retrieve files
var upload = new Upload();
upload.UserID = user.UserID;
upload.UploadID = XXX;
db.Uploads.InsertOnSubmit(upload)
db.SubmitChanges();

私がそれをしてアプリケーションを再実行した場合(そしてdbもちろん、オブジェクトが再構築された場合)-次のようなことをした場合:

foreach(var upload in user.Uploads)

そのユーザーのIDですべてのアップロードを取得します。(前の例で追加したように)問題は、アップロードを追加した後、変更を送信すると、アプリケーションがコレクション
を更新しないことです。user.Uploadsつまり、新しく追加されたアップロードを取得できません。

オブジェクトはuserオブジェクトに保存されSessionます。最初LINQ to SQL Frameworkは、オブジェクトの参照は更新されないのでuser、新しいSQLリクエストからオブジェクトを単に「リセット」する必要があります。私はこれを意味します:

Session["user"] = db.Users.Where(u => u.UserID == user.UserID).SingleOrDefault();

user(前のユーザーはどこですか)
しかし、それは役に立ちませんでした。
注意:アプリケーションを再実行した後user.Uploads、新しいアップロードがあります!
誰かがこのタイプの問題を経験しましたか、それとも正常な動作ですか?私はこのフレームワークの初心者です。アドバイスをいただければ幸いです。

ありがとうございました!

PS私はDB.Uploads.Count()別の方法で行を持っています、そしてそれアップロードの追加後に増加します。

編集:私が試したいくつかのこと:

  1. 私のコードの最初のメソッド(初期化)はdb = new new DBDataContext();です。
    私は最初の方法のdb.Dispose; db = new DBDataContext();db.SubmitChanges();に追加しましたが、それが何かをするかどうかを確認するためです。そうではありませんでした。

  2. 簡単な修正として、私はしましたuser.Uploads.Add(upload);適切なオブジェクトが追加され、ループuser.Uploadsで使用されます。foreachまあ、当たり前。しかし、私はまだこの振る舞いについての説明を待っています。ありがとうございました!
4

1 に答える 1

1

User オブジェクトを Session に格納すると、後続の要求でデータ コンテキストから切断されます。したがって、(ユーザー エンティティまたはその子エンティティの) データベースに加えられた変更は、オブジェクト インスタンスに反映されません。

これに対処するには、いくつかのオプションがあります。これまで行ってきたように、変更を加えるたびに、Session に格納されたオブジェクト インスタンスを自分で簡単に更新できます。データベースに変更を加える前に、セッションに保存されているエンティティを再接続することもできます (それ自体で問題が発生する可能性があります)。データを変更するたびに、セッション オブジェクト インスタンスを更新することもできます。最後に、オブジェクトをセッションに保存することはまったくできず、必要なときにいつでもデータベースから取得できます。

保存されたセッションオブジェクトを更新しようとしたが、役に立たなかったとあなたは言いました。に電話した後にこれを行ったと思いますよSubmitChanges()ね?これはうまくいったはずです。問題の 2 つのメソッド (つまり、新しいアップロードを挿入する完全なメソッドとforeachループを含むメソッド) と、それらがどのように相互作用するかを投稿していただけますか?

于 2012-07-08T15:57:03.410 に答える