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.

        }

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

本文转自博客园张占岭(仓储大叔)的博客,原文链接:EF架构~关于多对多关系表无法更新与插入的问题,如需转载请自行联系原博主。

目录
相关文章
|
存储 NoSQL Cloud Native
云原生大数据架构中实时计算维表和结果表的选型实践
随着互联网技术的日渐发展、数据规模的扩大与复杂的需求场景的产生,传统的大数据架构无法承载。
云原生大数据架构中实时计算维表和结果表的选型实践
|
存储 NoSQL Cloud Native
云原生大数据架构中实时计算维表和结果表的选型实践
前言传统的大数据技术起源于 Google 三架马车 GFS、MapReduce、Bigtable,以及其衍生的开源分布式文件系统 HDFS,分布式计算引擎 MapReduce,以及分布式数据库 HBase。最初的大数据技术与需求往往集中在超大规模数据存储、数据处理、在线查询等。在这个阶段,很多公司会选择自建机房部署 Hadoop 的方式,大数据技术与需求集中在离线计算与大规模存储上,常见的体现方式
373 0
云原生大数据架构中实时计算维表和结果表的选型实践
|
SQL 机器学习/深度学习 Cloud Native
.NET 云原生架构师训练营(模块二 基础巩固 EF Core 更新和迁移)--学习笔记
- 状态 - 自动变更检测 - 不查询删除和更新 - 并发
254 0
.NET 云原生架构师训练营(模块二 基础巩固 EF Core 更新和迁移)--学习笔记
|
SQL Cloud Native 架构师
.NET 云原生架构师训练营(模块二 基础巩固 EF Core 查询)--学习笔记
- 关联数据加载 - 客户端与服务端运算 - 跟踪与不跟踪 - 复杂查询运算 - 原生 SQL 查询 - 全局查询筛选器
247 0
.NET 云原生架构师训练营(模块二 基础巩固 EF Core 查询)--学习笔记
|
Cloud Native 架构师
|
存储 开发框架 Cloud Native
.NET 云原生架构师训练营(模块二 基础巩固 EF Core 基础与配置)--学习笔记
- 连接字符串 - 异步编程 - 日志 - DbContext池 - 类和配置表 - 属性和列配置 - 并发token - 索引
310 0
.NET 云原生架构师训练营(模块二 基础巩固 EF Core 基础与配置)--学习笔记
|
SQL Cloud Native 架构师
.NET 云原生架构师训练营(模块二 基础巩固 EF Core 介绍)--学习笔记
- ORM - Repository 仓储 - UnitOfWork 工作单元 - DB Context 与 DB Set - EF Core快速开始示例
292 0
.NET 云原生架构师训练营(模块二 基础巩固 EF Core 介绍)--学习笔记