标签:stroke -name isp splay article rap RKE cti class
原文:https://blog.csdn.net/weixin_40719943/article/details/106963747
(一)为导航属性赋新值
1 跟踪模式下为导航属性赋值,savechange() 新增一条导航属性表记录
2 离线模式下,Attach方法可以实现和跟踪模式下同样的效果
注:跟踪模式下
var player = context.Players
.OrderBy(x => x.Id)
.Last();
player.Resume = new Resume
{
Description = "this is resume",
Player = player
};
context.SaveChanges();
注:离线模式下,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)重新创建关系,插入到关系表
EntityFramework Core入门教程-08-修改关系数据2
标签:stroke -name isp splay article rap RKE cti class
原文地址:https://www.cnblogs.com/springsnow/p/13404244.html