zoukankan      html  css  js  c++  java
  • MVC3点滴之多对多关系修改实体

    今天在EF4.1 codefirst多对多问题上绕了一点功夫,终于解决了。出现的问题是一个User对应多个Role,一个Role对应多个User。在ORM中应该这样表达的

    class User

    {

        Public virtual ICollection<Role> Roles{get;set;}

    }

    Class Role

    {

        Public virtual ICollection<User> Users{get;set;}

    }

     

    那么EF会自动生成一张表User_Role表,字段是 UserId, RoleId。

    那么在操作员修改User中的Role时。我们必须Remove掉原来User中的Roles的的Item。

    如:user.Roles.Clear(); user.Roles.ForEach(t => t.Users.Remove(user));

    再往其中添加操作员选择的新的Roles,如:

    newRole.ForEach(t =>

    {

    User.Roles.Add(t);

    t.Users.Add(user);

    }

    注意上面红色下划线那句话,如果有这句话,在执行Update()方法时,EntityState就不是Detached,而是Added。造成Update()方法报错。正确的方法应该去掉那句话,EntityState就为Detached。Update方法就能正确执行。

  • 相关阅读:
    一些基本概念
    Linux命令
    浮点型数据
    编码习惯
    VC++ Debug编译方式
    程序和进程
    文件和目录
    登录
    c#发送http请求注意
    html5获取图片的宽高
  • 原文地址:https://www.cnblogs.com/SINXUESONG/p/2298400.html
Copyright © 2011-2022 走看看