多くの同様の質問が寄せられていることに気づきましたが、何十もの例を試した後でも、これを機能させることができません。私が抱えている問題には、Users テーブルの外部キー値の更新が含まれます。
ASP WebForms、.net 4.5、Entity Framework 5、SQL サーバー 2012 を使用して Web サイトを作成しています。
最初にデータベースを使用して EF を作成しました。ここでモデルのサンプルを確認できます。
私は 3 層アーキテクチャを使用しています。私のデータ アクセス レイヤーは、LINQ を使用してデータベースにクエリを実行し、(T4 で定義されているように) ユーザー オブジェクトを返します。
これは、オブジェクトが変更されると、オブジェクトがコンテキストから切断されることを意味します。(右?)
ページのコード ビハインドでオブジェクトを変更し、次のようにして UserRole を更新します。
(ページ読み込み中)
Dim _userAcces As UserLayer = UserLayer.getInstance
mUser = _userAcces.getUserWithCustomerAndRole(_ID)
Dim _rolesAccess As UserRolesLayer = UserRolesLayer.getInstance
mRoles = _rolesAccess.listUserRoles
(ボタンクリック時)
mUser.UserRole = mRoles.Item(dropDownRole.SelectedIndex)
この時点で、mUser オブジェクトは正しい (更新された) UserRole オブジェクトを保持しています。次に、mUser オブジェクトをデータ層に戻し、データベースを更新します。私が見た最も単純な例はこれを行います:
Using _context As New SaasPortalContext
_context.Entry(updatedUser).State = EntityState.Modified
_context.SaveChanges()
End Using
私も使用してみました:
- _context.users.attach
- _context.users.find(id) を使用してコンテキストからオリジナルを取得し、更新された User オブジェクトからオリジナルを更新する
- _context.entry(updatedUser) から dbentityentry オブジェクトを取得し、property("UserRole").isModified プロパティを true に設定します。
これらのメソッドのいずれかを使用すると、Users テーブルの UserRole の外部キー値が、UserRole テーブルの別のロールの ID に更新され、mUser オブジェクトの変更が反映されると予想されますが、これは行われず、値も変更されません。変化する。
私は何を間違っていますか?ユーザー テーブルで ID が更新されないのはなぜですか?
どんな助けでも大歓迎です