0

こんにちは、PRISM と Unity、Entity Framework を使用して小さな WPF アプリケーションを作成しました。

データベースにユーザーが入力した詳細と一致するユーザーが含まれている場合、現在ログインしているユーザーにアクセスするための sharedInfo クラスがあります。

ユーザーは特定のエンティティにメモを作成できます。メモを作成したユーザーを知りたいので、私のメモ クラスには SystemUser のナビゲーション プロパティがあります。新しいメモを作成し、プロパティを次のように設定すると:

note.SytemUser = _unityContainer.Resolve<ISharedInfo>("AppSharedInfo").LoggedInUser;

詳細を保存すると、新しいsystemUserが作成されます。Id プロパティを次のように設定するだけでは、これは発生しません。

note.SystemuserId =_unityContainer.Resolve<ISharedInfo>("AppSharedInfo").LoggedInUser.SystemUserId;

これは私には間違っているように思えます。メモの SystemUser プロパティを設定すると、どこが間違っているのか、何がユーザーの詳細の重複を引き起こしているのか教えていただけますか?

4

1 に答える 1

0

ほとんどの場合、次のnoteようにコンテキストに追加します。

context.Notes.Add(note);

この行は、noteそれ自体をAddedstateにするだけでnoteなく、コンテキスト インスタンスにまだ認識されていない のすべての関連オブジェクト、つまり state にある関連オブジェクトも含めますDetached。関連するエンティティも追加されないようにするには、 を呼び出す前に、関連するエンティティをコンテキスト (状態) にアタッチして、関連するエンティティが既に存在することを EF に明示的に伝える必要がありUnchangedます。Addnote

context.SystemUsers.Attach(note.SystemUser);
context.Notes.Add(note);
于 2013-02-23T18:50:24.470 に答える