0

多くの同様の質問が寄せられていることに気づきましたが、何十もの例を試した後でも、これを機能させることができません。私が抱えている問題には、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 が更新されないのはなぜですか?

どんな助けでも大歓迎です

4

1 に答える 1

0

モデルをセットアップするときに「外部キー関係を含める」のチェックボックスをオンにしなかったため、関係が適切に定義されていませんでした(私は推測します)。

于 2013-09-13T09:21:03.810 に答える