• EntityFramework Core入门教程-08-修改关系数据2


    原文:https://blog.csdn.net/weixin_40719943/article/details/106963747


    一、一对一关系表

    (一)为导航属性赋新值

    1 跟踪模式下为导航属性赋值,savechange() 新增一条导航属性表记录

    注:跟踪模式下

    var player = context.Players
                .OrderBy(x => x.Id)
                .Last();
    player.Resume = new Resume
    {
        Description = "this is resume",
        Player = player
    };
    context.SaveChanges();

    2 离线模式下,Attach方法可以实现和跟踪模式下同样的效果

    注:离线模式下,attach
    var player2 = context.Players
                 .AsNoTracking()//离线模式
                 .FirstOrDefault();
    player2.Resume = new Resume
    {
        Description = "Resum2"
    };
    {
        using var newContext = new ContextDemo();
        newContext.Attach(player2);//player2 不会更新,会创建创建Resume一条记录
        newContext.SaveChanges();
    }
    

    (二)修改导航属性值(修改关联表)

    player2数据库中已经有一个Resume了,再重新赋值,saveChange()会有异常

    var player2 = context.Players
                 .FirstOrDefault();
    player2.Resume = new Resume
    {
        Description = "Resum3"
    };
    Context.SaveChanges();
    

    解决方案:使用Include
    原理:players查询出来之后,先从关联关系中删除就数据,再插入新数据

    var player2 = context.Players
                 .Include(e=>e.Resume)
                 .FirstOrDefault();
    player2.Resume = new Resume
    {
        Description = "Resum3"
    };
    context.SaveChanges();
    

    二、多对多关系表修改

    代码省略,比较简单:
    1)先删除关系表中记录
    2)重新创建关系,插入到关系表

  • 相关阅读:
    测试用例的优先级的概念
    Day02.测试用例和测试方法
    day01.测试理论
    开发python 面试题
    4.路径页面接口开发
    ps命令没有显示路径找到命令真实路径
    Linux软链接和硬链接
    Linux文件元数据和节点表结构
    jinjia2语言
    Ansible之YAML语言
  • 原文地址:https://www.cnblogs.com/springsnow/p/13404244.html
Copyright © 2020-2023  润新知