Самый простой способ удалить объект с Entity Framework 4 - PullRequest
4 голосов
/ 25 января 2011

Ack!Я новичок в Entity Framework и пытаюсь найти самый простой способ удаления элемента.

У меня есть список с источником данных, установленным на объекты TagCategory из базы данных.Это работает нормально.Теперь я хотел бы удалить выбранный элемент.Поэтому я делаю что-то вроде этого:

TagCategory category = (TagCategory)lstCategories.SelectedItem;
using (MyEntities context = new MyEntities())
{
    context.AttachTo("TagCategories", category);
    context.DeleteObject(category);
    context.SaveChanges();
}

Это кажется достаточно простым, но это не работает.Ничего не удалено, нет сообщения об ошибке, ничего.

Итак, я вижу, что вместо этого я могу сделать что-то вроде этого:

using (MyEntities context = new MyEntities())
{
    string cmd = String.Format("DELETE FROM TagCategory WHERE TagCatID=@ID",
        category.TagCatID));
    context.ExecuteStoreCommand(qry);
}

Это похоже на работу.Так что я просто пойду с тем, что работает, или Entity Framework 4 действительно способен сделать это?

РЕДАКТИРОВАТЬ: Nevermind.На самом деле, у меня была еще одна проблема, которая препятствовала выполнению формы кода.Оба фрагмента, которые я разместил, вроде бы работают нормально.Мои извинения.

Ответы [ 3 ]

6 голосов
/ 25 января 2011

Вы можете использовать заглушку, что-то вроде этого:

using (var context = new MyEntities())
{
     var tagCategory = new TagCategory
     {
         PostId = category.TagCatID
     };
     context.TagCategories.Attach(tagCategory);
     context.DeleteObject(tagCategory);
     context.SaveChanges();
}
2 голосов
/ 25 января 2011

Я не уверен, что вы можете использовать AttachTo() для этого.Зависит от того, как вы заполнили список.

Что должно работать:

  var Key = context.CreateEntityKey("TagCategory", category);
  Object original;
  if (context.TryGetObjectByKey(Key, out original))
  {
        context.DeleteObject(original);
        context.SaveChanges();
  }
0 голосов
/ 04 мая 2013
// using the Find method of DBContext to retrieve the record you wish to delete
// works for me
// below code taken from a working WPF application using sdf database 

if (this.TransactionsDataGrid.SelectedIndex > -1)
{
    Transaction transaction = this.TransactionsDataGrid.SelectedItem as Transaction;
    if (transaction != null)
    {
        using (BilliEntities context = new BilliEntities())
        {
           try
           {
               Transaction trans = context.Transactions.Find(transaction.TransactionId);
               if (trans != null)
               {
                   // observable collection for datagrid
                   this.Transactions.Remove(transaction);
                   context.Transactions.Remove(trans);
                   context.SaveChanges();
               }
           }
           catch (Exception ex)
           {
              // for debugging
           }
        }
     }
 }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...