我有一个我正在努力解决的实体框架问题。我搜索了与我的问题有关的问题,但未能找到相关问题。如果您知道已经提出的任何类似问题,请感谢您指点我。
我的问题来自我正在为我的组织开发的网络应用程序。由于计划的公共使用,Web应用程序具有有限的SQL权限,限制选择,插入和更新到实际需要的唯一表。其中一个表是用户表,用于跟踪允许谁使用该应用程序,该网络应用程序仅对该表具有“选择”权限。
作为网络应用程序目的的一部分,访问用户可以创建表单并为该表单分配所有权。所有者可以是创建者本人或User表中的其他现有用户。所有者在表单实体上表示为导航属性。
分配所有权只是从表示用户和用户ID的HTML选择列表中进行选择的一个简单问题。然后,在(在服务器上)创建的表单实体上的外部用户ID被设置为表示所选用户所有者的ID。将表单实体添加到数据库上下文中,并调用SaveChanges方法以将新表单持久保存到数据库中的Form表中,并将所有者外键设置为指向User表中的相关行,基本上是典型的标准创建场景。
接下来会发生什么变化,我无法确定导致它有时失败的确切情况。有时保存成功,有时失败并显示一条错误消息,指出Entity Framework尝试对Users表执行更新,因为它没有Update权限。使用SQL事件探查器,我看到生成了一个更新语句,该语句尝试更新表示表单所有者的用户行的时间戳列。
显然,如果我向Web应用程序授予了Update权限,这个问题就会消失,但是没有理由为什么它应该能够更新User表,而且不需要它。如果我只是批准它,它将打开一个潜在的安全漏洞。我的问题是为什么Entity Framework在附加到表单实体后尝试更新导航属性的时间戳列?这只会偶尔失败,这表明有时候决定不必更新用户所有者的时间戳。附加到正在创建的表单的用户不会以任何方式进行修改,它只是分配给表单实体上的外键属性的数字。
让我感到困惑。希望你知道发生了什么以及如何解决它。
欣赏您的见解。