Entity Framework / MVC: запись коллекции в базу данных - PullRequest
1 голос
/ 12 августа 2011

То, что у меня есть, выглядит примерно так:

class foo
{
  [Key]
  int ID;
  List<Bar> bars;
  string s;
}
class bar
{
  [Key]
  int ID;
  string s;
}

, затем в контроллере:

public ActionResult BeAwesome(foo doo)
{
  db.Entry(doo).State = EntityState.Modified;
  db.SaveChanges();
  return View(doo);
}

Я могу подтвердить, что doo передается со списком баров, ностолбцы не передаются в базу данных.doo.s действительно спасенЧто мне нужно сделать, чтобы сохранить коллекцию?

Ответы [ 3 ]

1 голос
/ 12 августа 2011

Вы пытались присоединить объект к контексту, прежде чем установить его состояние?

db.foos.attach(doo);
db.Entry(doo).State = EntityState.Modified;

Что произойдет, если вы установите состояние каждого бара в doo на EntityState.Modified? Или, возможно, прикрепление каждого из стержней по отдельности в цикле.

0 голосов
/ 12 августа 2011

Причина в том, что только foo установлен на Modified - все связанные бары находятся в состоянии Unchanged. Вы должны пройтись по барам и установить их состояние:

public ActionResult BeAwesome(foo doo)
{
  db.Entry(doo).State = EntityState.Modified;
  foo.Bars.ForEach(b => db.Entry(b).State = EntityState.Modified);
  db.SaveChanges();
  return View(doo);
}

Очевидно, что если вы вставили или удалили несколько баров, вам нужна более сложная логика для установки состояния.

0 голосов
/ 12 августа 2011

вам нужно определить такие свойства, как

public virtual  List<Bar> bars{get; set;}

а также вам нужно определить навигационные свойства как виртуальные, чтобы включить отложенную загрузку.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...