zoukankan      html  css  js  c++  java
  • MVC+EF之多表关联数据更新

    多表关联数据更新
    关联数据有两种:一种是一对多,一种总是多对多
    eg:假设一个用户可以有任意多个角色,一个角色可以有任意多个用户。 下面来实现编辑某个用户时,显示该用户的角色进行编辑。
    步骤:
    1.先添加一个ViewModel, 用来表示角色是否分配给某个用户。
    2.打开UserRoleController,添加一个Edit的Action用来显示编辑页面。
    3.打开ViewsUserRoleIndex.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

  • 相关阅读:
    javascript 之迭代器
    前端数据结构--二叉树先序、中序、后序 递归、非递归遍历
    前端数据结构--树
    前端数据结构--散列表(哈希表)
    前端数据结构--线性结构-队列、栈
    前端数据结构--线性结构-链表
    前端数据结构--线性结构-数组
    前端数据结构---复杂度分析
    前端数据结构---相关基础概念
    css整理之-----------基本知识
  • 原文地址:https://www.cnblogs.com/xue-er/p/8023218.html
Copyright © 2011-2022 走看看