テーブル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()
別の方法で行を持っています、そしてそれはアップロードの追加後に増加します。
編集:私が試したいくつかのこと:
- 私のコードの最初のメソッド(初期化)は
db = new new DBDataContext();
です。
私は最初の方法のdb.Dispose; db = new DBDataContext();
後db.SubmitChanges();
に追加しましたが、それが何かをするかどうかを確認するためです。そうではありませんでした。 - 簡単な修正として、私はしました
user.Uploads.Add(upload);
。適切なオブジェクトが追加され、ループuser.Uploads
で使用されます。foreach
まあ、当たり前。しかし、私はまだこの振る舞いについての説明を待っています。ありがとうございました!