我意识到已经提出了许多类似的问题,但是在尝试了数十个示例之后,我仍然无法让它发挥作用。我遇到的问题涉及更新用户表中的外键值。
我正在使用 ASP WebForms、.net 4.5、Entity Framework 5、SQL server 2012 创建一个网站。
我首先使用数据库创建了 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) 从上下文中获取原件并从更新的用户对象中更新原件
- 从 _context.entry(updatedUser) 获取 dbentityentry 对象并将 property("UserRole").isModified 属性设置为 true
使用这些方法中的任何一种,我希望用户表中 UserRole 的外键值更新为 UserRole 表中不同角色的 ID,反映 mUser 对象中的更改,但这不会发生并且值不会改变。
我究竟做错了什么?为什么用户表中的 ID 不会更新?
任何帮助将不胜感激