Удалить строку из БД с EF Code First - PullRequest
0 голосов
/ 01 апреля 2011

Я пытаюсь использовать следующую функцию для удаления элемента:

        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 ]

3 голосов
/ 01 апреля 2011

Вы можете использовать Attach для присоединения существующей записи к текущему контексту.Это позволяет избежать извлечения записи из базы данных для ее удаления.

context.Set<T>().Attach(item);
1 голос
/ 01 апреля 2011

Вы можете использовать ObjectContext.Attach Method .

Вызовите Attach для ObjectContext, чтобы прикрепить объект к контексту объекта. Делайте это, когда объект уже существует в источнике данных, но в настоящее время не присоединен к контексту

0 голосов
/ 01 марта 2016

Другой способ удаления диапазона сущностей с помощью 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;
            }
        }
0 голосов
/ 27 апреля 2011

Попробуйте это

 context.Entry(record).State = EntityState.Deleted;
 context.SaveChanges();
0 голосов
/ 01 апреля 2011

Решил, но должен быть лучший способ?

        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;
        }
...