EntityFramework Core入门教程-08-修改数据1

EFCore更新数据有两种方式:
1.更新每一个字段(当前entity脱离了context跟踪)
场景:entity从前端传到后台,然后调用context更新,离线状态的数据更新时会将所有的字段更新一遍

void UpdateLeague(League league){
	_context.Leagues.Update(league);
	_context.Leagues.SaveChanges();
}

2.只更新部分修改的字段(当前entity被context跟踪)
本例leagues从context冲读出来,一直被context追踪,修改了name属性,只会更新这一个字段
其中UpdateRange代码可省略,在跟踪模式下context会一直追踪这个对象,savechange的时候会自动识别需要更新的字段

var leagues = context.Leagues.Skip(1).Take(3).ToList();
foreach (var item in leagues)
{
    item.Name += "_modify";
}

context.Leagues.UpdateRange(leagues);//跟踪模式下可省略,非跟踪模式下不可省略
context.SaveChanges();

那么什么是跟踪模式,什么是离线模式呢?见本教程–09

追踪模式下,被追踪的数据,我只想更新当前表,关联属性不想更新该怎么处理?
案例:下面这段代码,用newContext更新player时,对于newContext 来说 player是离线数据,
用newContext更新player也会更新Game表和GamePlayer表的所有属性值,这对于我们来说是不必要的。

var game = context.Games
            .Include(e => e.GamePlayers)
                .ThenInclude(e => e.Player)
             .FirstOrDefault();
var player = game.GamePlayers[0].Player;
player.Name = "newName";

{
    using var newContext = new ContextDemo();
    newContext.Update(player);
    newContext.SaveChanges();
}

解决方案:
修改Entry属性,Entry是EFCore设置跟踪等级的

{
    using var newContext = new ContextDemo();
    //newContext.Update(player);
    newContext.Entry(player).State = EntityState.Modified;
    newContext.SaveChanges();
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值