Entity framework 首先从数据库中删除带有EF代码的行

Entity framework 首先从数据库中删除带有EF代码的行,entity-framework,ef-code-first,delete-row,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>();

我尝试使用以下函数删除项目:

        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;
        }
内部静态bool删除(T记录)
{
int结果=0;
//获取数据库集
DatabaseDbContext context=新建DatabaseDbContext();
DbSet set=context.set();
//删除项目
设置、删除(记录);
//清理
context.Dispose();
record.Dispose();
//返回结果
返回结果>0;
}
我得到一个错误:“无法删除该对象,因为在ObjectStateManager中找不到它。”


我怎样才能修改它,使之像我想要的那样工作

解决了,但一定有更好的办法

        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;
        }
内部静态bool删除(T记录)
{
int结果=0;
//删除项目
DatabaseDbContext context=新建DatabaseDbContext();
T item=context.Set().Where(r=>r.Id==record.Id).FirstOrDefault();
context.Set().Remove(项);
结果=context.SaveChanges();
//清理
context.Dispose();
record.Dispose();
//返回结果
返回结果>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;
        }
内部静态bool删除(T记录)
{
int结果=0;
//删除项目
DatabaseDbContext context=新建DatabaseDbContext();
T item=context.Set().Where(r=>r.Id==record.Id).FirstOrDefault();
context.Set().Remove(项);
结果=context.SaveChanges();
//清理
context.Dispose();
record.Dispose();
//返回结果
返回结果>0;
}

您可以使用“附加”将现有记录附加到当前上下文。这样可以避免为了删除记录而从数据库检索记录

context.Set<T>().Attach(item);
context.Set().Attach(项目);

您可以使用“附加”将现有记录附加到当前上下文。这样可以避免为了删除记录而从数据库检索记录

context.Set<T>().Attach(item);
context.Set().Attach(项目);
您可以使用

调用ObjectContext上的Attach将对象附加到对象上下文。当对象已存在于数据源中,但当前未附加到上下文时,请执行此操作

你可以用

调用ObjectContext上的Attach将对象附加到对象上下文。当对象已存在于数据源中,但当前未附加到上下文时,请执行此操作

试试这个

 context.Entry(record).State = EntityState.Deleted;
 context.SaveChanges();
试试这个

 context.Entry(record).State = EntityState.Deleted;
 context.SaveChanges();

使用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;
            }
        }

使用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;
            }
        }