使用EF Code First从db中删除行

时间:2011-04-01 09:31:47

标签: entity-framework ef-code-first delete-row

我尝试使用以下功能删除项目:

        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中找不到该对象。”

如何将其修改为我想要的工作?

5 个答案:

答案 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;
            }
        }