zoukankan      html  css  js  c++  java
  • EF架构~关于多对多关系表无法更新与插入的问题

    回到目录

    在EF里,我们设计模型时,会设计到多对多关系,在EF里会把这种关系会转成两个一对多的关系表,这是比较友好的,因为多对多来说,对于业务本身没什么意思,所以隐藏了,没什么坏处,但对于这个隐藏来说,对开发人员来讲你就无法主动控制这张关系表了,而需要使用EF的update来更新主表的同时去更新关系表,这对于初学者会出现一些问题,今天说的就是多对多关系无法更新和插入的问题.

    数据结构

      public partial class WebManageRoles : Lind.DDD.Domain.Entity
        {
            public WebManageRoles()
            {
                this.WebManageMenus = new List<WebManageMenus>();
                this.WebManageUsers = new List<WebManageUsers>();
            }
            [DisplayName("名称"), Required]
            public string RoleName { get; set; }
            [DisplayName("关于")]
            public string About { get; set; }
            [DisplayName("排序"), Required]
            public int SortNumber { get; set; }
            [DisplayName("最后操作人")]
            public string Operator { get; set; }
            [DisplayName("权限"), Required]
            public int OperatorAuthority { get; set; }
            [DisplayName("部门"), Required]
            public int DepartmentID { get; set; }
    
            public virtual WebDepartments WebDepartments { get; set; }
            public virtual ICollection<WebManageMenus> WebManageMenus { get; set; }
            public virtual ICollection<WebManageUsers> WebManageUsers { get; set; }
        }

    关于AutoDetectChangesEnabled

    参考:https://msdn.microsoft.com/en-us/data/jj556205.aspx

    大叔的解释,当AutoDetectChangesEnabled为true时,可以加载依赖的关系,在插入和更新时会有同步完成(多对多,一对多关系时使用),当值为false时,只更新(插入)主表的数据

    问题解决

      old.WebManageMenus = menuRepository.GetModel(i => menu.Contains(i.Id)).ToList();
      old.DepartmentID = dept;
      old.RoleName = entity.RoleName;
      old.SortNumber = entity.SortNumber;
      old.About = entity.About;
      old.DataUpdateDateTime = DateTime.Now;
      roleRepository.Update(old);

    在数据上下文中的设置

            public ManagerContext()
                : base("DefaultConnection")
            {
               
                this.Configuration.AutoDetectChangesEnabled = true;//对多对多,一对多进行curd操作时需要为true
                this.Configuration.LazyLoadingEnabled = false;
                this.Configuration.ProxyCreationEnabled = false;//禁止动态拦截System.Data.Entity.DynamicProxies.
    
            }

    对技术的研究与探索,我们还在继续和坚持...

    回到目录

  • 相关阅读:
    写了一个好玩的小软件, 监视鼠标以及键盘的动作, 全局钩子. HowTired
    2005的五一计划
    给你的爱一直很安静
    沉重悼念蓝色理想经典论坛原Flash版主[手工感情][Handmade]
    一不小心就成就了一段姻缘,哈哈
    基于dotnet的代码统计工具新版发布
    四天三夜 刻骨铭心 颠峰战将 永不言败
    怎么回事?现在博客园极不稳定
    屋漏偏逢连夜雨, 船迟又遇打头风
    适用于IE浏览器及非IE浏览器的xmlhttp脚本
  • 原文地址:https://www.cnblogs.com/lori/p/5709887.html
Copyright © 2011-2022 走看看