2013-06-20 4 views
2

Я думаю, что у меня почти такая работа, но я не могу понять, как закончить.Сохранение списка объектов в db - MVC

Модель:

public class Location 
{ 
    public int LocationId { get; set; } 
    public string SiteCode { get; set; } 
    public int PersonId { get; set; } 
    public int IncidentId { get; set; } 
    } 

вид Модель

public List<Location> LocationList { get; set; } 

Контроллер:

[HttpPost] 
    public ActionResult AddRecord(RecordViewModel model) 
    { 
     if (ModelState.IsValid) 
     { 
      Location location; 
      foreach (var loc in model.LocationList) 
      { 
       location = new Location 
       { 
        PersonId = model.PersonId, 
        SiteCode = loc.SiteCode, 
        IncidentId = loc.IncidentId 
       }; 
      } 

      using (var db = new MyEntities()) 
      { 
       db.Order.AddObject(incident); 
       db.Location.AddObject(location); 
       db.Comment.AddObject(comment); 

       db.SaveChanges(); 
      } 

Линия db.Location.AddObject(location); получает пустой. Как получить список местоположений из foreach, в db?

+0

Является ли действие украшенным '[HttpPost]'? Кроме того, что такое 'TrespassEntities'? –

+0

Да это сообщение. Имя изменено на MyEntities, это соединение EF db. – BattlFrog

+0

Вы должны создать проект репо для обработки связанных с базой данных данных. – JsonStatham

ответ

3

Вы так близко!

// create a new list of your entity Location (may not be in namespace Data) 
var locationList = new List<Data.Location>(); 
foreach (var loc in model.LocationList) 
{ 
    var location = new Data.Location 
    { 
     PersonId = model.PersonId, 
     SiteCode = loc.SiteCode, 
     IncidentId = loc.IncidentId 
    }; 
    locationList.Add(location); 
} 

using (var db = new MyEntities()) 
{ 
    db.Order.AddObject(incident); 

    foreach (var item in LocationList) 
    { 
     db.Location.AddObject(location); 
    } 
    db.Comment.AddObject(comment); 

    db.SaveChanges(); 
} 

ИЛИ: поскольку у вас уже есть LocationList на вашей модели, использовать его вместо

using (var db = new MyEntities()) 
{ 
    db.Order.AddObject(incident); 

    foreach (var loc in model.LocationList) 
    { 
     var location = new Data.Location 
     { 
      PersonId = model.PersonId, 
      SiteCode = loc.SiteCode, 
      IncidentId = loc.IncidentId 
     }; 

     db.Location.AddObject(location); 
    } 
    db.Comment.AddObject(comment); 

    db.SaveChanges(); 
} 
+0

Спасибо, Дэвид, вот и все. – BattlFrog

0

Вы можете просто использовать AddRange.

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

db.Location.AddRange(LocationList) 
db.SaveChanges();