MVC+EF之多表关联数据更新

多表关联数据更新
关联数据有两种:一种是一对多,一种总是多对多
eg:假设一个用户可以有任意多个角色,一个角色可以有任意多个用户。 下面来实现编辑某个用户时,显示该用户的角色进行编辑。
步骤:
1.先添加一个ViewModel, 用来表示角色是否分配给某个用户。
2.打开UserRoleController,添加一个Edit的Action用来显示编辑页面。
3.打开Views\UserRole\Index.cshtml, 增加一个编辑按钮  
4.再根据Edit Action自动生成Edit View  
5.修改相关内容,主要是两点:其一是部门,其二市角色(角色是通过一组checkbox来显示的。Checkbox显示数据库中所有角色,已分配给用户的会显示选中状态。通过勾选checkbox的方式来实现用户角色的更新)
注意:角色少这样弄没问题,如果多的话经典的做法,可以用两个listbox,中间用箭头将左右两边的选项移动
6.最后再完成HttpPost的Edit功能
a.首先更新SysUser表:用model binder中的值更新entity: userToUpdate.可以看到,我们使用了白名单指定数据库中需要更新的字段。
TryUpdateModel(userToUpdate,"",new string[] {"LoginName","Email","Password","CreateDate","SysDepartmentID"})
b.再更新SysUserRole表:将数据库中值和编辑后的值进行比对,基本逻辑是:如果被选中了,原来没有的要添加;如果没被选中,原来有的要删除。
UpdateUserRoles(selectedRoles, userToUpdate);
注意:在UpdateUserRoles里,我新建了一个连接using (AccountContext db2=new AccountContext())如果用之前的db会报如下错误:已有打开的与此 Command 相关联的 DataReader,必须首先将它关闭。
原生SQL使用总结
A.原生SQL执行查询:
需要返回实体模型,使用DbSet.SqlQuery (context会跟踪,等效于LINQ方式)
需要返回其他类型,使用Database.SqlQuery
B.原生SQL执行更新:
使用Database.ExecuteSqlCommand

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值