現在取り組んでいるエンティティ フレームワークの問題があります。自分の問題に関連する質問を検索しましたが、関連する質問が見つかりませんでした。すでに尋ねられた同様の質問を知っている場合は、それを指摘していただきありがとうございます。
私の問題は、組織のために現在開発している Web アプリから発生します。計画されたパブリック使用のため、Web アプリには SQL 権限が制限されており、選択、挿入、および更新を実際に必要なテーブルのみに制限しています。これらのテーブルの 1 つは、アプリの使用を許可されているユーザーを追跡するユーザー テーブルです。Web アプリには、そのテーブルに対する選択権限しかありません。
Web アプリの目的の一部として、アクセスするユーザーはフォームを作成し、そのフォームに所有権を割り当てることができます。所有者は、作成者自身または User テーブル内の別の既存のユーザーです。所有者は、フォーム エンティティのナビゲーション プロパティとして表されます。
所有権の割り当ては、ユーザーとユーザー ID を表す HTML 選択リストから選択するだけです。次に、(サーバー上で) 作成されるフォーム エンティティの外部ユーザー ID が、選択されたユーザー所有者を表す ID に設定されます。フォーム エンティティがデータベース コンテキストに追加され、SaveChanges メソッドが呼び出されて新しいフォームがデータベース内の Form テーブルに保存されます。また、ユーザー テーブル内の関連する行を指すように設定された所有者外部キーと共に、基本的に標準的な作成が行われます。シナリオ。
次に何が起こるかはさまざまですが、失敗することがある正確な状況を特定することはできませんでした。保存が成功する場合もあれば、Entity Framework がユーザー テーブルで更新を実行しようとしたことを示すエラー メッセージが表示されて失敗する場合もありますが、更新権限がないために失敗します。SQL プロファイラーを使用すると、フォームの所有者を表すユーザー行のタイムスタンプ列を更新しようとする更新ステートメントが生成されていることがわかります。
Web アプリに Update パーミッションを付与すれば、この問題は明らかに解消されますが、User テーブルを更新できるようにする理由はなく、必要とすべきではありません。許可しただけでは、潜在的なセキュリティ ホールが開く可能性があります。私の質問は、エンティティ フレームワークがフォーム エンティティにアタッチされた後、ナビゲーション プロパティのタイムスタンプ列を更新しようとするのはなぜですか? これは時々失敗するだけであり、ユーザー所有者のタイムスタンプを更新する必要がないと判断される場合があることを示唆しています。作成中のフォームに関連付けられているユーザーは、まったく変更されません。これは、フォーム エンティティの外部キー プロパティに割り当てられた番号にすぎません。
私を当惑させてください。うまくいけば、何が起こっているのか、どうすれば回避できるのかがわかります。
あなたの洞察に感謝します。