实体框架/ MVC:将集合写入数据库

时间:2011-08-12 01:09:10

标签: c# asp.net-mvc entity-framework entity-framework-4.1

我看起来像这样:

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 个答案:

答案 0 :(得分:1)

您是否尝试在设置状态之前将实体附加到上下文?

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

如果将doo中每个条形的状态设置为EntityState.Modified,会发生什么?或者可能将每个条形单独地连接在一个环中。

答案 1 :(得分:0)

你需要定义像这样的属性,

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

并且您还需要将导航属性定义为虚拟以启用延迟加载。

答案 2 :(得分:0)

原因是只有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);
}

显然,如果你插入或删除了一些条形,你需要更复杂的逻辑来设置状态。