Не найти метод DeleteOnSubmit - PullRequest
       0

Не найти метод DeleteOnSubmit

0 голосов
/ 24 октября 2011

Я хочу удалить строки из таблицы в моей базе данных. у меня есть член

private static WeightScaleEntities Weight = new Weight();

этот участник содержит мою базу данных. в базе данных у меня есть таблица: User_Activity.

Я хочу удалить строки из пользовательской активности по заданному i_UserActivityId следующим образом:

//Get the rows for delete
var deleteUserActivities = from details in Weight.User_Activity
                                   where details.Id == i_UserActivityId
                                   select details;

Теперь я хочу удалить эти строки, поэтому я попытался сделать:

foreach (var item in deleteUserActivities)
{
         m_WeightScaleEntities.User_Activity.*
}

и я не получаю метод DeleteOnSubmit!

Почему? есть еще вариант ???

Ответы [ 3 ]

1 голос
/ 25 октября 2011

User_Activity.*: это опечатка?

Я думаю, что вы хотите:

foreach (var item in deleteUserActivities)
{
     Weight.DeleteObject(item);
}

А затем SaveChanges() в контексте объекта.

Кстати, статический объектный контекст не очень хорошая идея.Вам следует тщательно контролировать жизненный цикл контекстов объектов.

0 голосов
/ 19 ноября 2016

Существует несколько способов выполнить удаление в Entity Framework. Необходимо принять во внимание, какие значения вы хотите удалить?одна строка или больше.когда вам нужно удалить строку из таблицы, мы можем использовать следующие способы:

// first way
        using (WeightScaleEntities db = new WeightScaleEntities())
        {
            var deleteUserActivities = from details in db.User_Activity
                                       where details.Id == i_UserActivityId
                                       select details;
            if (deleteUserActivities.Count() > 0)
            {
                db.deleteUserActivities.Remove(deleteUserActivities.First());
                db.SaveChanges();
            }
        }

эта строка deleteUserActivities.Count()>0, чтобы проверить, есть ли у вас результат в запросе или нет.и это deleteUserActivities.First(), если запрос возвращает множество строк, удаляет первый.«чтобы сделать процесс более безопасным, если вы не знаете о данных в таблице»

// second way
        using (WeightScaleEntities db = new WeightScaleEntities())
        {
            var deleteUserActivities = (from details in db.User_Activity
                                        where details.Id == i_UserActivityId
                                        select details).SingleOrDefault();
            if (deleteUserActivities != null)
            {
                db.User_Activity.Remove(deleteUserActivities);
                // or use this line
                //db.Entry(deleteUserActivities).State = System.Data.Entity.EntityState.Deleted;
                db.SaveChanges();
            }
        }

Вы также можете использовать Single или SingleOrDefault, чтобы получить один объект.Single или SingleOrDefault сгенерирует исключение, если результат содержит более одного элемента.Используйте Single или SingleOrDefault, если вы уверены, что результат будет содержать только один элемент.Если в результате есть несколько элементов, то должны возникнуть некоторые проблемы.

Кроме того, если вам нужно удалить одну или несколько строк, используйте этот способ:

using (WeightScaleEntities db = new WeightScaleEntities())
        {
            var deleteUserActivities = (from details in db.User_Activity
                                       where details.Id == i_UserActivityId
                                       select details).ToList<User_Activity>(); //<User_Activity> her name of your DbSet
            foreach(deleteObject in deleteUserActivities)
            {
                db.Entry(deleteObject).State = System.Data.Entity.EntityState.Deleted;    
            }
            db.SaveChanges();
        }

С наилучшими пожеланиями и извините за английский язык.

0 голосов
/ 18 ноября 2016
using(WeightScaleEntities db=new WeightScaleEntities())
        {
            var deleteUserActivities = from details in db.User_Activity
                                       where details.Id == i_UserActivityId
                                       select details;
            if (deleteUserActivities.Count()>0)
            {
                db.deleteUserActivities.Remove(deleteUserActivities.First());
                db.SaveChanges();
            }
        }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...