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

本文关键字:集合 数据库 框架 MVC 实体 | 更新日期: 2023-09-27 18:05:12

我看到的是这样的:

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

then在控制器中:

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

我可以确认正在传入一个条形图列表,但是条形图没有传播到数据库。豆儿。S确实被保存了。我需要做些什么来保存集合?

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

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

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

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

您需要像这样定义属性,

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

,还需要将导航属性定义为virtual以启用延迟加载

原因是只有foo被设置为Modified -所有相关栏都处于Unchanged状态。您必须遍历bar并设置它们的状态:

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);
}

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