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)重新创建关系,插入到关系表

原文地址:https://www.cnblogs.com/springsnow/p/13404244.html