2013-04-29 14 views
0

Каким образом я могу удалить элемент из коллекции? (Я использую MVC 4 и EF.)Entity Framework/MVC Удалить элемент из коллекции

В качестве примера:

public class Birthday 
{ 
    public string Name { get; set; } 

    public virtual ICollection<Gift> Gifts { get; set; } 
} 

public class Gift 
{ 
    public string Name { get; set; } 

    public double Price { get; set; } 
} 

Я использую Editing a variable length list, ASP.NET MVC 2-style создать динамический список подарков.

В примере показано, как «Удалить» строку. Это приведет к удалению строки со страницы, и правильные подарки отправляются на контроллер.

Когда я обновляю День рождения/Подарки, все новое обновляется должным образом, но все, что удалено, все еще существует.

Так что мой вопрос - какие предпочтительные способы удаления подарков?

Два пути я думал о уже:

  1. Получить День рождения из БД и сравнить подарки удаление при необходимости. Я не люблю эту идею, потому что она кажется тяжелой.
  2. Используйте WebApi/Ajax и удалите Подарок из списка и БД, когда пользователь нажимает ссылку удаления. Мне нравится это лучше, чем # 1, но делает ли это слишком много бизнес-логики в слое презентации?

Я предполагаю, что у других людей была подобная проблема и есть умное решение, о котором я еще не думал.

Заранее благодарен!

ответ

2

Сделать подарок api контроллер. Пусть у него есть метод Delete, принимающий Id любого типа вашего идентификатора. И сделать что-то вроде этого в нем:

public class GiftsController: ApiController 
{ 
    public void Delete(Guid Id) 
    { 
      var context = new MyContext(); 
      var giftToDelete = context.Gifts.FirstOrDefault(g=> g.Id == Id); 
      if(giftToDelete != null) 
      { 
       context.Gifts.Remove(giftToDelete); 
       context.SaveChanges(); 
      } 
    } 
} 

Убедитесь, что вы делаете запрос удаления к этому API в ваших JS функция удаления. Вы также можете заменить тело этого метода примерно на Service.DeleteGift(Id), если вы слишком обеспокоены тем, что делаете что-то в нужном месте.

+0

Спасибо за помощь! – Jeff

0

Как это:

public class ValuesController : ApiController 
    { 
     private List<string> list = new List<string>{"Item1","Item2","Item3","Item4","Item5"}; 

     // DELETE api/values/5 
     public List<string> DeleteItem(int id) 
     { 
      list.Remove(list.Find((i => i.ToString().Contains(id.ToString())))); 
      return list; 
     } 
    } 
Смежные вопросы