实体框架/ 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确实被保存了。我需要做些什么来保存集合?
您是否尝试在设置其状态之前将实体附加到上下文?
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);
}
显然,如果你要插入或删除一些栏,你需要更复杂的逻辑来设置状态