我尝试使用以下功能删除项目:
internal static bool Remove(T record)
{
int result = 0;
// get db set
DatabaseDbContext context = new DatabaseDbContext();
DbSet<T> set = context.Set<T>();
// remove item
set.Remove(record);
// clean up
context.Dispose();
record.Dispose();
// return result
return result > 0;
}
我收到错误:“无法删除该对象,因为在ObjectStateManager中找不到该对象。”
如何将其修改为我想要的工作?
答案 0 :(得分:3)
您可以使用“附加”将现有记录附加到当前上下文。这样可以避免从数据库中检索记录以便删除它。
context.Set<T>().Attach(item);
答案 1 :(得分:1)
您可以使用ObjectContext.Attach Method。
在ObjectContext上调用Attach以将对象附加到对象上下文。当对象已存在于数据源中但当前未附加到上下文
时,请执行此操作
答案 2 :(得分:0)
解决了它,但必须有更好的方法吗?
internal static bool Remove(T record)
{
int result = 0;
// remove item
DatabaseDbContext context = new DatabaseDbContext();
T item = context.Set<T>().Where(r => r.Id == record.Id).FirstOrDefault();
context.Set<T>().Remove(item);
result = context.SaveChanges();
// clean up
context.Dispose();
record.Dispose();
// return result
return result > 0;
}
答案 3 :(得分:0)
试试这个
context.Entry(record).State = EntityState.Deleted;
context.SaveChanges();
答案 4 :(得分:0)
使用InsertedDate删除实体范围的另一种方法
public bool Delete_Programs_By_Date(DateTime programDate)
{
try
{
using (var db = new Context())
{
db.Program.RemoveRange(db.Program.Where(x => x.InsertedDate == programDate).ToList());
db.SaveChanges();
}
return true;
}
catch
{
return false;
}
}