问题出在SaveChanges上;说一下代码的逻辑:就是给一个对象增加几个权限 , 如果上次他有2个权限 这次增加一个就是三个 然后保存就没有问题;但是这个不错任何操作 ( 就是还是两个权限 )在存入的时候就报这个错误.(其他读写都没有问题)

解决方案 »

  1.   

    数据库open()了吗
      

  2.   

    没有遇到过。
    http://blog.csdn.net/wdw984/article/details/40540935
      

  3.   


    往数据库新增 删除什么的都没有问题;我再详细说一下逻辑:这个一个为权限分配角色的功能,比如说首页菜单这个权限(ID:5),之前已经分配了2个角色:管理员(ID:11),董事长(ID:12);现在对这个权限下的角色进行重新分配,增加了一个角色:中心总监(ID:13),就变成了三个,这样操作往数据库存储时没有任何问题的,或者说给这个权限去掉一个角色的操作然后写入数据库也是没有问题的;唯一的问题就是:我在分配角色的时候不做任何操作就保存了(原有的三条记录(ID:11,12,13)都没有变)这样在存入数据库SaveChanges的时候就会报这个错误。说一下代码的逻辑:在往数据库存入的时候,我会删除之前这个权限下所有的角色信息,然后再把当前所选择的角色信息重新写入.
      

  4.   

    您给的这个链接里面他所遇到的问题我看了一下,我的工厂层所有的类以及属性都是public的,而且我也感觉这个工厂层的关系不大,我不是很精通EF操作,所以我角色问题还是出在ef读写操作上面
      

  5.   

    那你是不是在checkbox的点击事件中,获取了表单信息?
    然后确认按钮将表单信息通过ef存储到数据。
    如果你没有选择角色。
    那么表单信息为空。然后ef将一个空记录保存到数据库。从而引发了异常???
      

  6.   

    没有,我在保存的时候进行调试,因为我不做任何操作的话,这次存入数据库还是上次那几个角色(ID值也一样),然后就是在这儿SaveChanges的时候内部就报了一个无效的操作.....
      

  7.   

    查看实体详细错误信息用这个异常试试catch (System.Data.Entity.Validation.DbEntityValidationException ex){}
      

  8.   


    也有可能,不过我并没有遇到过这情况。
    你在savechange之前。dbEF.Entry<T>(entity).State = EntityState.Modified;
                dbEF.SaveChanges();
    这样试试看
      

  9.   

    是不是你查询到的(绑定到checkbox)的操作结果没有跟踪(类似AsNoTracking().ToList()),所以保存就会报错了(没有被Attach)。
      

  10.   


    也有可能,不过我并没有遇到过这情况。
    你在savechange之前。dbEF.Entry<T>(entity).State = EntityState.Modified;
                dbEF.SaveChanges();
    这样试试看我也遇到这种问题,不修改任何数据提交就报错, 用12楼的方法就可以了,明确告诉ef当前是修改。