MVC将列表保存到数据库

时间:2017-03-18 19:33:27

标签: c# asp.net asp.net-mvc

您好我正在尝试将电子邮件列表保存到我的数据库中,但我无法获取要保存的列表。

这是模型中的List:

[Display(Name = "Mailing List")]
public List<string> MailingList { get; set; }

这是控制器方法,我尝试将新的字符串电子邮件添加到列表中并将其保存到数据库

public ActionResult VenueMailingList(int id)
{
    //Get UserID and Email
    string UserId = User.Identity.GetUserId();
    string email = User.Identity.Name;

    //Check if the user is logged in
    if (UserId != null)
    {
        ViewBag.LoggedIn = true;

        //Add the users email to this venues email mailing list
        Venue venue = db.Venues.Find(id);

        //If list is null, initlise it
        if (venue.MailingList == null)
        {
            venue.MailingList = new List<string>();
        }

        venue.MailingList.Add(email);

        db.SaveChanges();
    }
    return View();
}

3 个答案:

答案 0 :(得分:0)

您需要在DbContext中更改数据库,以便EntityFramework跟踪更改并将这些更改保存到您的数据库中。您需要以下代码:

using (var context = new MyDbContext())
{
     Venue venue = context.Venues.Find(id);

     //If list is null, initlise it
     if (venue.MailingList == null)
     {
          venue.MailingList = new List<string>();
     }

     venue.MailingList.Add(email);

     context.SaveChanges();
}

以下链接提供了有关如何使用EntityFramework的精彩教程:http://www.entityframeworktutorial.net/EntityFramework4.3/add-entity-using-dbcontext.aspx

答案 1 :(得分:0)

试试这个:

if (venue.MailingList == null)
{
          venue.MailingList = new List<string>();
}

venue.MailingList.Add(email);
venue.MailingList.Entry(email).State = EntityState.Added; // you need to add this statement

db.SaveChanges();

答案 2 :(得分:0)

请使用addrange方法。

db.YourTable.AddRange(YourList)
db.SaveChanges();