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

  • 相关阅读:
    upgrade和update的区别
    批处理文件的几种路径扩展
    CMD does not support UNC paths as current directories.的巧妙解决方案
    让批处理不回显错误信息
    python中那纠结的os.system()与空格处理
    jQuery Mobel 学习相关资料整理(一)
    c#获取某月的第一天和某月的最后一天
    Umbraco网站制作(七) 调用外部用户控件
    Umbraco网站制作(八) 实现伪静态
    Timeout 时间已到。在操作完成之前超时时间已过或服务器未响应。
  • 原文地址:https://www.cnblogs.com/xue-er/p/8023218.html
Copyright © 2011-2022 走看看