关于多对多关系表无法更新与插入的问题

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

以上所述是小编给大家介绍的关于多对多关系表无法更新与插入的问题 ,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对我们网站的支持!

(0)

相关推荐

  • 数据库修改多对多的中间表的记录的技巧

    一.把中间表相应的字段先删除,然后再添加 *当单方表是从数据库中查得持久化对象必须把此对象的set容器用clear()清空, *同时把一对多的级联配置文件中的级联风格设置为cascade="all,delete-orphan", *把中间表中要修改的对象对应的数据全部删除, *通过save()或merge()重新持久化中间表的对象 ------此种方法可以在只修改中间表的数据,而不修改单方表的数据时. 二.通过级联来修改单方表同时修改中间表 *当单方表是从数据库中查得持久化对象必须把此

  • 关于多对多关系表无法更新与插入的问题

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

  • django 多对多表的创建和插入代码实现

    这篇文章主要介绍了django-多对多表的创建和插入代码实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 表的创建 # 作者和书籍之间的多对多关系 class Author(models.Model): ''' 作者表 ''' nid = models.AutoField(primary_key=True) name = models.CharField(verbose_name='作者名称',max_length=32) # 第一种方式直接

  • Django 多对多字段的更新和插入数据实例

    表的普通字段 一对多字段 多对多字段 插入数据 #插入数据 def add(request): G_title=request.POST.get('title')#-------值为:python书本 G_publish=request.POST.get('publish') #-------值为:1 G_authors_list=request.POST.getlist('authors')#-------值为:[3,7] publish_obj=Publish.objects.get(id=

  • sqlserver中操作主从关系表的sql语句

    典型的方法就是对于主表的各数据字段进行更新或新增,对于从表一般都会先删除相关的所有记录,然后再进行插入.也就是说每次保存时,从表的数据都要重新执行一遍删除再插入的过程.这是一个不错的方法,在使用数据库事务后,不会存在删除后又没有插入导致数据不一致的情况. ok,原理是这样,那么到实际的操作中,大家如何操作的呢?有人通过在程序中,通过多次数据库操作完成如上的要求,这种方法可能存在这数据的不一致性,因为无法保证在两个数据语句操作之间出现意外.那么我们就合并到一个存储过程中去完成吧,复杂的参数和接收后

  • PHP laravel中的多对多关系实例详解

    数据表之间是纵横交叉.相互关联的,laravel的一对一,一对多比较好理解,官网介绍滴很详细了,在此我就不赘述啦,重点我记下多对多的关系 一种常见的关联关系是多对多,即表A的某条记录通过中间表C与表B的多条记录关联,反之亦然.比如一个用户有多种角色,反之一个角色对应多个用户. 为了测试该关联关系,我们沿用官网的用户角色示例: 需要三张数据表:users.roles 和 role_user,role_user 表按照关联模型名的字母顺序命名(这里role_user是中间表),并且包含 user_i

  • django ManyToManyField多对多关系的实例详解

    Django 的 ORM 有多种关系:一对一,多对一,多对多 各自定义的方式为 : 一对一: OneToOneField 多对一: ForeignKey 多对多: ManyToManyField 上边的描述太过数据而缺乏人性化,我们来更人性化一些: 多个属于一个,即 belong to : ForeignKey,多个属于一个 一个有一个,即 has one: OneToOneField 一个有很多个,即 has many: lots of A belong to B 与 B has many A

  • MyBatis 实现多对多中间表插入数据

    目录 多对多中间表插入数据 方法 具体实现 多对多的关联表中,如何同时插入数据的学习心得 插入步骤 多对多中间表插入数据 在做这个员工管理系统demo的时候,由于user和role是多对多关系,且user主键是自增的,所有我们没办法提前知晓这个user_id,所以插入的时候,就需要先插入user,然后再找到刚插入的id拿出来,再插入中间表user_role,这样才能将表关系对应起来,才能算一个完整的插入的过程. 所以现在的问题就是怎么知道这个user_id,再怎么拿出来,再插入中间表user_r

  • SpringDataJpa的使用之一对一、一对多、多对多 关系映射问题

    目录 SpringDataJpa的使用 -- 一对一.一对多.多对多 关系映射 项目依赖 项目配置 sql文件(MySQL版) 级联关系简述 @OneToOne 一对一 关系映射 1.无中间表,维护方添加外键,被维护方添加对应项 2.无中间表,维护方添加外键,被维护方不添加对应项 3.有中间表,维护方不添加外键,被维护方不添加对应项 @OneToMany.@ManyToOne 一对多 关系映射 1.无中间表,多方维护并添加外键,一方被维护 2.有中间表,多方维护,一方被维护 3.无中间表,多方维

  • SQL update 多表关联更新的实现代码

    实现多表更新,尤其是A表和A的子表B表数据更新,下面是例子 有A.B张表,其记录如下: A表 c1       c2 -------------- 1       a1 2       a2 3       a3 8       a8 B表 c1       c3 -------------- 1        b1 2        b1 3        b3 10      b10 A.c1与B.c1相等,用一条sql语句,实现A.c2的值更新为B.c3 -----------------

  • MySQL查询结果复制到新表的方法(更新、插入)

    MySQL中可以将查询结果复制到另外的一张表中,复制的话通常有两种情况,一种是更新已有的数据,另一种是插入一条新记录.下面通过例子来说明.首先构建两个测试表. 表t1: 表t2: 1.如果t2表中存在score值,将score更新到t1表中.方法如下: UPDATE t1,t2 SET t1.score = t2.score WHERE t1.id = t2.id AND t2.score IS NOT NULL 这就是将查询结果作为条件更新另一张表,当然,t2也可以是更为复杂的一个查询结果而不

随机推荐