发现问题...我在我的context.entity上设置了MergeOption.NoTracking ...叹息
不确定我做错了什么。
无法删除对象,因为在ObjectStateManager中找不到该对象。
var deleteOrders = db.TABLE.Where(x => x.WCCR_ID == WccrId && x.ADAM == null).ToList();
foreach (var item in deleteOrders)
{
db.TABLE.DeleteObject(item);
}
db.SaveChanges();
我尝试附加项目db.Attach(item),但是抛出错误'具有相同密钥的对象已经存在'。
感谢您的帮助。欢呼声
答案 0 :(得分:1)
您的代码看起来不错。尝试使用:
var deleteOrders = db.TABLE.Where(x => x.WCCR_ID == WccrId && x.ADAM == null)
.ToList();
foreach (var item in deleteOrders)
{
db.Entry(item).State = System.Data.EntityState.Deleted;
}
db.SaveChanges();
<强>更新强>
EF 4.0使用ObjectContext
类。
using(YourContext ctx = new YourContext())
{
ctx.ObjectStateManager.ChangeObjectState(entity, System.Data.EntityState.Deleted);
}
EF 4.1使用DbContext
类,其中定义了Set<T>
和Entry
等方法。
using(YourContext ctx = new YourContext())
{
ctx.Entry(entity).State = System.Data.EntityState.Deleted;
}
更新2
NuGet包仅包含EF 4.1运行时,不包括用于将DbContext与Model First和Database First开发一起使用的Visual Studio项模板。
下载:http://www.microsoft.com/en-us/download/details.aspx?displaylang=en&id=26825