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.

        }
复制代码

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

回到目录

posted @   张占岭  阅读(4337)  评论(0编辑  收藏  举报
编辑推荐:
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· 没有源码,如何修改代码逻辑?
阅读排行:
· 分享4款.NET开源、免费、实用的商城系统
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
· 记一次.NET内存居高不下排查解决与启示
历史上的今天:
2013-07-27 品味编程~底层开发人员应该这样设计一个字体类
2012-07-27 代码重构~提取到类
2011-07-27 不忘本~浅拷贝和深拷贝
2011-07-27 用Jquery自己开发个代阴影的对话框吧!
2011-07-27 不忘本~结构
2011-07-27 数据结构~在页面上渲染树型结构
2011-07-27 数据结构~时间复杂度和空间复杂度
点击右上角即可分享
微信分享提示