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

C# 实体框架/MVC:将集合写入数据库,c#,asp.net-mvc,entity-framework,entity-framework-4.1,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; } 我可以确认doo正在与一个条列表一起传递,但是这些条没有被传播到数据库。杜斯确实得救了。我需要做什么才能保存集合?在设置实体的状态之前,是否尝试将其附加到上下文 db.foos.attach(doo); db.Entry(doo).State = En

我所拥有的是这样的:

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

我可以确认doo正在与一个条列表一起传递,但是这些条没有被传播到数据库。杜斯确实得救了。我需要做什么才能保存集合?

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

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

如果将doo中每个条的状态设置为EntityState.Modified,会发生什么?或者可能将每个条单独附加到循环中。

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

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

如果将doo中每个条的状态设置为EntityState.Modified,会发生什么?或者可能将每个条单独附加到一个循环中。

您需要这样定义属性

public virtual  List<Bar> bars{get; set;}
公共虚拟列表栏{get;set;}

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

您需要这样定义属性

public virtual  List<Bar> bars{get; set;}
公共虚拟列表栏{get;set;}

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

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

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

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

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

+1如果对象未连接(例如,它们已从视图中返回),则它们将不会持续存在。在DbContext API设置状态中,将自动修改以附加对象。+1如果对象未连接(例如,它们已从视图中返回),则它们将不会持久。在DbContext API设置状态为“已修改”时,自动附加对象。执行此操作并将条形图设置为“已修改”会解决此问题。执行此操作并将条形图设置为“已修改”会解决此问题。