实体框架: Remove 与 DeleteObject的区别

小D2013 2011-08-04 09:23:17
技师 j = this.db.技师.First(p => p.技师编号 == "008");
j.技师_排钟队列.Load();
j.技师_做钟类别.Load();

foreach(技师_做钟类别 item in j.技师_做钟类别.Where(p=>p.消费类别==10016).ToList())
//j.技师_做钟类别.Remove(item);
this.db.技师_做钟类别.DeleteObject(item);

foreach (技师_排钟队列 item in j.技师_排钟队列.Where(p => p.消费类别 == 10016).ToList())
//j.技师_排钟队列.Remove(item);
this.db.技师_排钟队列.DeleteObject(item);
this.db.SaveChanges();

如上 用DeleteObject没有问题,如果用Remove则报错 ,请 高人详细讲讲吧
...全文
338 24 打赏 收藏 转发到动态 举报
写回复
用AI写文章
24 条回复
切换为时间正序
请发表友善的回复…
发表回复
晏子 2011-09-08
  • 打赏
  • 举报
回复
1、j.技师_排钟队列.Remove(item1);
2、 this.db.技师_排钟队列.DeleteObject(item1);

我没有深入研究过这个,j.技师_排钟队列,remove应该是删除“技师”与“技师_排钟队列”的关系吧!!!有些关系是不能删的,比如,外键不能为空的情况!!!

DeleteObject是删除数据库中的表数据,当然是要提交后
不知道说对了没有!
diecode 2011-09-07
  • 打赏
  • 举报
回复
简直是受罪,看得眼花了

等强人

“不能修改正在遍历的集合”
starry 2011-09-02
  • 打赏
  • 举报
回复
foreach是只读的,如果一定要用foreach进行删除,建议先给对象创建副本对象,然后通过foreach副本对象判断出需要删除的key,再用原对象进行remove
小D2013 2011-08-31
  • 打赏
  • 举报
回复
ding
小D2013 2011-08-15
  • 打赏
  • 举报
回复
什么dataservice?这就是一个小例子,实际代码不是这么写的
机器人 2011-08-12
  • 打赏
  • 举报
回复
你这是 DataService 么?
小D2013 2011-08-12
  • 打赏
  • 举报
回复
靠,下面改成first,效果还是一样,DeleteObject可以,remove不可以,求解

技师 j = this.db.技师.First(p => p.技师编号 == "008");
j.技师_排钟队列.Load();
j.技师_做钟类别.Load();

技师_做钟类别 item = j.技师_做钟类别.First(p=>p.消费类别==10016);
//j.技师_做钟类别.Remove(item);
this.db.技师_做钟类别.DeleteObject(item);

技师_排钟队列 item1= j.技师_排钟队列.First(p => p.消费类别 == 10016);
//j.技师_排钟队列.Remove(item1);
this.db.技师_排钟队列.DeleteObject(item1);
this.db.SaveChanges();

PatrickCao 2011-08-11
  • 打赏
  • 举报
回复
显而易见,foreach中不能对list使用Remove

机器人 2011-08-11
  • 打赏
  • 举报
回复
把元素从数组中移除那么数组个数就发生改变,
这和元素属性修改为Deleted当然不一样啦。

var list = new List<string> {"1","2","3"};
foreach(var item in list)
list.Remove(item);



foreach(var item in list)
item = "deleted";

一样么?
小D2013 2011-08-11
  • 打赏
  • 举报
回复
督察因为你说 foreach 是只读的,所以我才跟你说 用 first也不可以,他跟只读没关系,你看看我的代码,用foreach 用 deleteobject 就没问题
q107770540 2011-08-11
  • 打赏
  • 举报
回复
first是取集合第一个数据 不知你怎么又说到first上来了
for(int i=0;i<list.count();i++)
{
if(list[i]=="aaa")
{
list.Remove(list[i]);
i--;
}
}
小D2013 2011-08-11
  • 打赏
  • 举报
回复
即使不用foreach,改为用first也是报错,楼上还没有说到重点上
q107770540 2011-08-11
  • 打赏
  • 举报
回复
从 ObjectStateManager 中标记对象以备删除。 当调用 SaveChanges 方法时,在数据源中删除该对象。

foreach是只读的 用Remove当然会报错 Remove会立即删除item
小D2013 2011-08-11
  • 打赏
  • 举报
回复
csdn高手快来
小D2013 2011-08-10
  • 打赏
  • 举报
回复
代码这么写有什么不好,用英文有什么好处,请 亚亚 北京** 给仔细说说其中原因,

不能修改正在遍历的集合,所以用remove是错的
DeleteObject只是将集合中的实体添标记为删除,并不是将实体移除集合,而是将实体添标记为EntityState.Deleted

上面这个回答也不对

老毕回答的有门,但没有讲的通俗易懂,我还是不明白

报错如下
不能修改正在遍历的集合,所以用remove是错的
DeleteObject只是将集合中的实体添标记为删除,并不是将实体移除集合,而是将实体添标记为EntityState.Deleted
老毕 2011-08-09
  • 打赏
  • 举报
回复
在ADO Enity Framework里,Add/Remove是ReferenceSet<T>的方法,AddObject/DeleteObject是ObjectContext与Entity的方法。

除了引用内嵌的ReferenceSet<T>子表的Remove()方法,DeleteObject()还包括修改映射关系等操作。

你可以打开.edmx下面的cs文件查看自动生成的Entity类,其中有一些关于Reference<T>与ReferenceSet<T>的引用。
ycproc 2011-08-09
  • 打赏
  • 举报
回复
代码没有你这么些的

你用易语言开发吧
artwl_cn 2011-08-09
  • 打赏
  • 举报
回复
不能修改正在遍历的集合,所以用remove是错的
DeleteObject只是将集合中的实体添标记为删除,并不是将实体移除集合,而是将实体添标记为EntityState.Deleted
子夜__ 2011-08-05
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 matrixcl 的回复:]

楼主在给洗浴中心写管理系统啊
[/Quote]
小D2013 2011-08-05
  • 打赏
  • 举报
回复
SP1234快出来吧
加载更多回复(3)

8,497

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 LINQ
社区管理员
  • LINQ
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧