0

我意识到已经提出了许多类似的问题,但是在尝试了数十个示例之后,我仍然无法让它发挥作用。我遇到的问题涉及更新用户表中的外键值。

我正在使用 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 不会更新?

任何帮助将不胜感激

4

1 回答 1

0

我终于弄清楚我做错了什么,在设置模型时我没有选中“包括外键关系”框,这意味着关系没有正确定义(我假设)。

于 2013-09-13T09:21:03.810 回答