首页 新闻 会员 周边 捐助

EF Core更新数据的时候报错

0
悬赏园豆:200 [已解决问题] 解决于 2017-04-18 10:54

1.EF在更新数据的时候报错,Bug复原:如果修改的时候不对任何数据进行修改,则报错,如果修改了某一个属性,则不报错,,报错内容如下图所示:

实现方法的代码封装如下:

  

大家谁遇到过这个问题,提供一下大家的思路,谢谢!~~~~~

EF
Kencery的主页 Kencery | 菜鸟二级 | 园豆:357
提问于:2016-11-07 09:36
< >
分享
最佳答案
0

有可能是else的判断逻辑有问题:

var modify = ctx.Entry(entity);
if(isUpdate){
    ctx.Set<T>().Attach(entity);
    modify.State = EntityState.Modified;
} 
else{
    propertiesToUpdate.ToList().ForEach(p => modify.Property(p).IsModified = true);
}

 

收获园豆:200
brusw | 小虾三级 |园豆:746 | 2016-11-07 13:26

下面的判断是指定修改固定字段的,如果改成这样会有问题~~~~~

Kencery | 园豆:357 (菜鸟二级) | 2016-11-07 13:48

@Kencery: 是修改指定字段,实体未在ef容器中跟踪需要将每个字段的IsModified属性设置为true,具体有什么问题呢?

brusw | 园豆:746 (小虾三级) | 2016-11-07 14:56

@JoiWilliam: 上面我发的那个的最终结果是,如果设置为true,则更新我传递的字段不更新其它字段,如果传递false,则不更新后面的我指定的字段而更新其它数据库的字段,如果不传递指定的修改字段,则直接修改全部的数据库字段

Kencery | 园豆:357 (菜鸟二级) | 2016-11-07 17:47

@Kencery: isUpdate是用来标记使用propertiesToUpdate更新的吗?

brusw | 园豆:746 (小虾三级) | 2016-11-07 18:19
其他回答(4)
0

应该Entity与Database结构不一致,可以尝试重新生成或更新。

更新请参见:https://docs.efproject.net/en/latest/platforms/aspnetcore/existing-db.html

Thancoo | 园豆:144 (初学一级) | 2016-11-07 11:10

 数据库和实体结构绝对是一一对应的~

支持(0) 反对(0) Kencery | 园豆:357 (菜鸟二级) | 2016-11-07 12:53
0

你的数据库带有版本字段,控制并发。

czd890 | 园豆:14482 (专家六级) | 2016-11-07 12:47

数据库是没有带的~

支持(0) 反对(0) Kencery | 园豆:357 (菜鸟二级) | 2016-11-07 12:52

@Kencery: 你的错误提示表示update没有受影响的行数。不是版本字段就是id有问题。

支持(0) 反对(0) czd890 | 园豆:14482 (专家六级) | 2016-11-07 13:08

@calvinK:  数据库没有加版本ID

支持(0) 反对(0) Kencery | 园豆:357 (菜鸟二级) | 2016-11-07 13:17

@Kencery: 

生成的update语句,条件数据库查不到数据。骚年。

支持(0) 反对(0) czd890 | 园豆:14482 (专家六级) | 2016-11-07 13:50
0

if(propertiesToUpdate.Length==0)

{

  return await Task.Run(()=>false);

}

 

既然不修改就会报错,那不修改的时候啥都不做不就完事了!

刘宏玺 | 园豆:14020 (专家六级) | 2016-11-07 14:57

但是修改实体传递了,是不会走这一步。。。。

支持(0) 反对(0) Kencery | 园豆:357 (菜鸟二级) | 2016-11-07 17:48

@Kencery: 那你在加一个参数叫isEntityUpdate

 

 

if(propertiesToUpdate.Length==0)

{

  if(isEntityUpdate)

  {

    cxt.Set<T>().Update(entity);

  }

}

支持(0) 反对(0) 刘宏玺 | 园豆:14020 (专家六级) | 2016-11-08 19:11
0

我还是建议不要封装ef...除了多敲代码.让结构僵化,没有任何意义

你这个问题在错误提示里面不是让你去看一个连接.

错误提示看着像是配置下就能解决的问题.

吴瑞祥 | 园豆:29449 (高人七级) | 2016-11-09 16:01
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册