2011-08-12 62 views
1

我有什么看起来像这样:实体框架/ MVC:写一个集合到数据库

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.s确实得到保存。我需要做些什么才能使收藏保存?

+0

您是否使用EF Code First? – devuxer

回答

0

您需要定义的属性就是这样,

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

,你也需要为虚拟,使延迟加载定义的导航性能。

+0

这样做,并设置栏进行修改照顾。 –

1

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

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

,如果你设定每个栏的状态在斗到EntityState.Modified会发生什么?或者可能将每个条分别附加到一个循环中。

+0

+1如果物体未连接 - 例如他们从视图中回来 - 他们不会坚持。 –

+0

在DbContext API设置状态为Modified时自动附加对象。 –

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

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

相关问题