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.
    
            }

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

    回到目录

  • 相关阅读:
    VS2008编写MFC程序--使用opencv2.4()
    November 02nd, 2017 Week 44th Thursday
    November 01st, 2017 Week 44th Wednesday
    October 31st, 2017 Week 44th Tuesday
    October 30th, 2017 Week 44th Monday
    October 29th, 2017 Week 44th Sunday
    October 28th, 2017 Week 43rd Saturday
    October 27th, 2017 Week 43rd Friday
    October 26th, 2017 Week 43rd Thursday
    October 25th, 2017 Week 43rd Wednesday
  • 原文地址:https://www.cnblogs.com/lori/p/5709887.html
Copyright © 2011-2022 走看看