1

我目前正在处理一个实体框架问题。我搜索了与我的问题相关的问题,但找不到相关的问题。如果您知道已经问过任何类似的问题,感谢您指点我。

我的问题来自我目前正在为我的组织开发的网络应用程序。由于计划中的公共使用,Web 应用程序具有有限的 SQL 权限,将选择、插入和更新限制为实际需要的唯一表。其中一个表是 Users 表,它跟踪允许使用该应用程序的人员,Web 应用程序仅对该表具有 Select 权限。

作为 Web 应用程序目的的一部分,访问用户可以创建表单并将所有权分配给该表单。所有者可以是创建者本人,也可以是 User 表中的其他现有用户。所有者表示为表单实体上的导航属性。

分配所有权只是从代表用户和用户 ID 的 HTML 选择列表中进行选择的简单问题。然后(在服务器上)正在创建的表单实体上的外部用户 ID 设置为代表所选用户所有者的 ID。表单实体被添加到数据库上下文中,并调用 SaveChanges 方法将新表单与设置为指向 User 表中相关行的所有者外键一起保存到数据库中的 Form 表中,基本上是典型的标准创建设想。

接下来发生的事情各不相同,我无法确定导致它有时失败的确切情况。有时保存成功,有时它会失败并显示一条错误消息,指出实体框架试图对用户表执行更新,但由于它没有更新权限而失败。使用 SQL Profiler,我看到生成了一条更新语句,该语句尝试更新代表表单所有者的用户行的时间戳列。

显然,如果我向 Web 应用程序授予更新权限,这个问题就会消失,但是没有理由让它能够更新 User 表,而且它不应该是必需的。如果我只是授予它,它将打开一个潜在的安全漏洞。我的问题是,为什么实体框架在附加到表单实体后会尝试更新导航属性的时间戳列?这只是偶尔会失败,这表明有时决定不需要更新用户所有者的时间戳。附加到正在创建的表单的用户不会以任何方式修改,它只是分配给表单实体上的外键属性的数字。

让我困惑。希望您对正在发生的事情以及我如何解决它有所了解。

欣赏您的见解。

4

0 回答 0