EF 使用lambda表达式 更新一对多数据时报错
1、需求
更新一对多表中的附表数据,表结构如下:

2、思路
个人觉得一个个去对比关联的附表数据是删除还是添加比较麻烦,就直接清空主表关联的附表,然后重新建立关联关系。
3、弊端
如果附表(前提是附表的ID是自增的)还关联着其它表就会丢失他们之间的关联关系
4、主要代码
//创建语句查询查询出主表(WaterSamplingPoint)和附表(ExpansionCleaningRecord)
var wsp = _db.WaterSamplingPoint.Include(i => i.ExpansionCleaningRecords).Where(p => p.Id == model.Id).FirstOrDefault(); if (wsp == null)//如果主表记录不存在就添加记录
{
_db.WaterSamplingPoint.Add(model);
}
else //有主表记录就修改主表记录和更新附表数据
{
_db.ExpansionCleaningRecord.RemoveRange(wsp.ExpansionCleaningRecords);//标记和主表关联的附表数据为删除状态(可加可不加,不加会产生冗余数据)
wsp.ExpansionCleaningRecords = model.ExpansionCleaningRecords; //将前台传过来的主表关联的附表数据赋给需要修改的数据库主表数据
_db.Entry(wsp).State = System.Data.Entity.EntityState.Modified; //将数据库中的主表记录标记为修改
_db.Entry(wsp).CurrentValues.SetValues(model); //更新主表属性
}
int count = _db.SaveChanges();//执行修改命令
if (count > )
{
return true;
}
return false;
5、注意事项
1)、红色代码可加可不加,不添加会产生冗余数据
2)、在查询语句中添加.AsNoTracking()语句数据库将不会对附表进行增删改的操作,如果有红色代码还会报“无法删除此对象,因为未在 ObjectStateManager 中找到它”的错误,如下图所示:

使用“AsNoTracking”表示不跟踪查询的实体,则在SaveChanges()期间,实体中的附表的更改不会保存到数据库。详细说明
EF 使用lambda表达式 更新一对多数据时报错的更多相关文章
- Entity Framework 通过Lambda表达式更新指定的字段
本来需要EF来更新指定的字段,后来在园子里找到了代码 var StateEntry = ((IObjectContextAdapter)dbContext).ObjectContext.ObjectS ...
- ntpdate更新系统时间时报错Can't find host ntp1.aliyun.com: Servname not supported for ai_socktype (-8)
ntpdate更新系统时间时报错Can't find host ntp1.aliyun.com: Servname not supported for ai_socktype (-8) 所报错误: [ ...
- mysql更新表数据时报错 You can't specify target table 'RES_CATALOG_CLASSIFY' for update in FROM clause
You can't specify target table for update in FROM clause含义:不能在同一表中查询的数据作为同一表的更新数据. 将sql语句 UPDATE RES ...
- Error Code: 1175 Mysql中更新或删除时报错(未带关键字条件)
SET SQL_SAFE_UPDATES = 0; SQL_SAFE_UPDATES = {0 | 1} 如果设置为0,则MySQL会放弃在WHERE子句或LIMIT子句中不使用关键字的UPDATE或 ...
- lambda函数、lambda表达式
C++11 新特性:Lambda 表达式 豆子 2012年5月15日 C++ 10条评论 参考文章:https://blogs.oracle.com/pcarlini/entry/c_1x_tidbi ...
- C++11 新特性:Lambda 表达式
参考文章:https://blogs.oracle.com/pcarlini/entry/c_1x_tidbits_lambda_expressions 或许,Lambda 表达式算得上是 C++ 1 ...
- flink中使用lambda表达式
flink中使用lambda表达式 1.使用lambda的一个示例 2.使用上面这种写法通常或得到如下错误 3.解决方案 4.建议 5.完整代码 在 java8中有一种新的语法糖,即 lambda表达 ...
- 在EF中使用Expression自动生成p=>new Entity(){X="",Y="",..}格式的Lambda表达式灵活实现按需更新
一.基本介绍 回忆:最早接触Expression是在学校接触到EF的时候,发现where方法里的参数是Expression<Func<T,bool>>这么一个类型,当 ...
- EF core 中用lambda表达式和Linq的一些区别
转眼一看,又过了10几天没有写博客了,主要还是没有什么可以写的,因为遇到的问题都不是很有价值.不过最近发现用lambda表达式,比用Linq的代码量会少一些,而且也方便一些.不过两者都差不多,相差不是 ...
随机推荐
- Mac MAMP 使用终端shell操作mysql数据库
在MAMP中已经集成了phpMyAdmin,可以很方便的管理mysql数据库,但是有的情况是phpMyAdmin不能做到的.比如,导入sql文件,当sql文件非常大(大于20MB)的时候,apache ...
- HDU 2602Bone Collector 01背包问题
题意:给出一个t代表有t组数据,然后给出n,n代表有n种石头,v代表旅行者的背包容量,然后给出n种石头的价值和容量大小,求能带走的最大价值 思路:01背包问题,每种石头只有拿与不拿两种状态.(其实我是 ...
- 2005年NOIP普及组复赛题解
题目涉及算法: 陶陶摘苹果:入门题: 校门外的树:简单模拟: 采药:01背包: 循环:模拟.高精度. 陶陶摘苹果 题目链接:https://www.luogu.org/problem/P1046 循环 ...
- Python--day32--ftp文件传输报错的原因
解决办法:把buffer改小 server.py #实现一个大文件的上传或下载 #配置文件 ip地址 端口号 import json import socket import struct sk = ...
- H3C RIP路由表的更新
- git update-index --assume-unchanged
有的时候,不小心提交了一个配置文件config.php,每次在本地开发测试之后,都需要更改配置文件.相当麻烦. 使用 git update-index --assume-unchanged /pa ...
- 2018-11-2-win10-uwp-通过-win2d-画出笔迹
title author date CreateTime categories win10 uwp 通过 win2d 画出笔迹 lindexi 2018-11-2 20:11:0 +0800 2018 ...
- 【23.26%】【codeforces 747D】Winter Is Coming
time limit per test1 second memory limit per test256 megabytes inputstandard input outputstandard ou ...
- CKEditor配置,最适合新手两种方式详解。
CKEditor.js的配置,大概有两种方式,这里有基础版和全面的版本可以试验 https://cdn.ckeditor.com/4.8.0/full-all/ckeditor.js http://c ...
- 【NOIP模拟赛】【数学】完全平方数
问题描述 一个数如果是另一个整数的完全平方,那么我们就称这个数为完全平方数(Pefect Sqaure),也称平方数. 小A认为所有的平方数都是很perfect的~ 于是他给了小B一个任务:用任意个不 ...