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设置状态为“已修改”时,自动附加对象。执行此操作并将条形图设置为“已修改”会解决此问题。执行此操作并将条形图设置为“已修改”会解决此问题。