日期:2014-05-20  浏览次数:20759 次

实体框架: Remove 与 DeleteObject的区别
技师 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则报错 ,请 高人详细讲讲吧

------解决方案--------------------
楼主在给洗浴中心写管理系统啊
------解决方案--------------------
探讨

楼主在给洗浴中心写管理系统啊

------解决方案--------------------
代码没有你这么些的

你用易语言开发吧

------解决方案--------------------
在ADO Enity Framework里,Add/Remove是ReferenceSet<T>的方法,AddObject/DeleteObject是ObjectContext与Entity的方法。

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

你可以打开.edmx下面的cs文件查看自动生成的Entity类,其中有一些关于Reference<T>与ReferenceSet<T>的引用。
------解决方案--------------------
从 ObjectStateManager 中标记对象以备删除。 当调用 SaveChanges 方法时,在数据源中删除该对象。

foreach是只读的 用Remove当然会报错 Remove会立即删除item
------解决方案--------------------
first是取集合第一个数据 不知你怎么又说到first上来了
for(int i=0;i<list.count();i++)
{
if(list[i]=="aaa") 
{
list.Remove(list[i]);
i--;
}
}
------解决方案--------------------
把元素从数组中移除那么数组个数就发生改变,
这和元素属性修改为Deleted当然不一样啦。

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

和 

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

一样么?
------解决方案--------------------
显而易见,foreach中不能对list使用Remove


------解决方案--------------------
你这是 DataService 么?
------解决方案--------------------
foreach是只读的,如果一定要用foreach进行删除,建议先给对象创建副本对象,然后通过foreach副本对象判断出需要删除的key,再用原对象进行remove
------解决方案--------------------
简直是受罪,看得眼花了

等强人

“不能修改正在遍历的集合”
------解决方案--------------------
1、j.技师_排钟队列.Remove(item1);
2、 this.db.技师_排钟队列.DeleteObject(item1);

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

DeleteObject是删除数据库中的表数据,当然是要提交后
不知道说对了没有!