C# 使用实体框架保存列表框中的项目

C# 使用实体框架保存列表框中的项目,c#,entity-framework,asp.net-mvc-4,listbox,C#,Entity Framework,Asp.net Mvc 4,Listbox,我有一个简单的问题。我有一个列表框,我想在我的数据库中保存多个项目,但我不知道如何使用EntityFramework来实现这一点。我尝试使用for来执行此操作,但它不起作用,因为函数.Count捕获数据库中的所有行,而我只需要用户正在保存的行。有人能帮我吗? 我必须把一个idconcessao保存到许多IDLOCALIDADES中。 这是我的密码: if (ModelState.IsValid) { for (int i = 0; i <= db

我有一个简单的问题。我有一个列表框,我想在我的数据库中保存多个项目,但我不知道如何使用EntityFramework来实现这一点。我尝试使用for来执行此操作,但它不起作用,因为函数.Count捕获数据库中的所有行,而我只需要用户正在保存的行。有人能帮我吗? 我必须把一个idconcessao保存到许多IDLOCALIDADES中。 这是我的密码:

 if (ModelState.IsValid)
        {

            for (int i = 0; i <= db.SINCO_LOCALIDADE_CONCESSAO.ToList().Count(); i++)
            {
                db.SINCO_LOCALIDADE_CONCESSAO.Add(sinco_localidade_concessao);
                db.SaveChanges();
            }


            return RedirectToAction("Index");
        }

首先,下拉列表和列表框只能返回标量类型int、string等,对于列表框,只能返回标量类型列表。通常,选项值只是用户正在选择的对象的id。你的问题没有给我太多的代码,但你需要一个视图模型:

public class FooViewModel
{
    // any other properties you need to edit

    public List<int> SelectedItemIds { get; set; }
    public IEnumerable<SelectListItem> ItemChoices { get; set; }
}
然后,在创建/编辑操作中返回视图之前,只需调用此方法:

PopulateItemChoices(model);
return View(model);
foo.Items = db.Items.Where(m => model.SelectedItemIds.Contains(m.Id));
您的视图将使用此视图模型作为其模型:

@model Namespace.To.FooViewModel
然后列表框的代码是:

@Html.ListBoxFor(m => m.SelectedItemIds, Model.ItemChoices)
对于您的post操作:

PopulateItemChoices(model);
return View(model);
foo.Items = db.Items.Where(m => model.SelectedItemIds.Contains(m.Id));

谢谢你的回答,但我已经有一个列表框工作正常,我的问题是我只是在尝试保存多个数据时。在我的问题示例中,我只能保存集合中的一行,而其他行则不保存……我尝试这样做,但是公共IEnumerable ItemChoices{get;set;}不起作用,因为无法识别SelectListItem。我在我的类中添加了名称空间System.Web.Mvc.Html,但它不起作用。@Jessica。SelectListItem位于System.Web.Mvc而不是System.Web.Mvc.Html中,如果您没有按照Chris的建议进行操作,那么您的操作就不正确。回发时,SelectedItemIds将包含所选项目的ID列表。我不理解这部分:foo.items=db.items.Wherem=>model.SelectedItemIds.Containsm.ID;。我在代码中写道:sinco_localidade_concessao.IDLOCALIDADE=db.sinco_localidade_concessao.where m=>sinco_localidade_concessao.SelectedItemIds.Containsm.IDLOCALIDADE;消息错误:错误3无法隐式转换类型'System.Linq.IQueryable'em'int'Linq部分正常。问题在于您试图将查询结果设置为int属性的值。这应该存储在表示关系的任何集合属性中。