我意识到许多类似的问题已经被问到,但在尝试了数十个例子之后,我仍然无法得到它的工作。我遇到的问题涉及更新Users表中的外键值。实体框架5外键值不更新(VB.NET)
我使用ASP的WebForms创建一个网站,.NET 4.5,实体框架5 2012年
我使用数据库首先,在这里你可以看到模型的样本产生的EF,SQL服务器:
我正在使用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对象传递回我的数据层以更新数据库。我所看到的simnplest例子做到这一点:
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对象更新原始)和isModified属性设置的属性(“UserRole的”)。为true
使用这些方法中的任何一种,我期望用户表中的UserRole的外键值更新为UserRole表中不同角色的ID,反映mUser对象中的更改,但这不会发生,并且值不会改变。
我在做什么错?为什么用户表中的ID不会更新?
任何帮助,将不胜感激
N.B.使用当前代码示例(设置要修改的状态)更改非外部属性(如名称)时,会正确更新数据库 –