实体框架/ MVC从集合中删除项目

时间:2013-04-29 17:59:58

标签: entity-framework asp.net-mvc-4 entity-framework-5

我可以从集合中删除某个项目的方法有哪些? (我正在使用MVC 4和EF。)

举个例子:

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更喜欢这个,但是这会在表示层中放置太多的业务逻辑吗?
  3. 我猜其他人有类似的问题并且有一个我还没想过的聪明的解决方案。

    提前致谢!

2 个答案:

答案 0 :(得分:2)

制作礼物api控制器。 让它有一个Delete方法接受你的Id所属类型的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();
           }
     }
}

确保在JS删除功能中向此api发出DELETE请求。 如果你太担心在正确的地方做事,你也可以用一些Service.DeleteGift(Id)替换这个方法的主体。

答案 1 :(得分: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;
        }
    }