2012-11-14 46 views
0

不知道我是否误解了EF Code的工作原理或设置错误。我创建了一个有很多ChartResults的图表POCO。简单一对多。我可以先用EF代码关闭此链接行为吗?

当我做

Chart myChart = new Chart(); 
myChart.ChartResults.Add(new ChartResult(){Pos=1}); 
myChart.ChartResults.Add(new ChartResult(){Pos=2}); 
context.Charts.Add(myChart); 
context.Save(); 

我得到一个图表添加,然后眼泪通过所有的图表结果,并补充说,到数据库了。这非常巧妙,但是问题出在chartResults上,有时我想添加,有时候我想简单地更新引用。但我怎么做到这一点没有:

1) going through each Chart and adding it to a new object that is unlinked 
2) then going through each ChartResult and explicitely deciding what to do/not do? 
+0

您不必将myChart添加到上下文中,也不必立即保存它。这允许您以任何您想要的方式操作POCO,直到准备好写入数据库为止。但是,在上面的示例中,EF正在按照您的要求进行操作。 –

+0

@HughJones图表实例在某些时候需要添加到上下文中,如果要将这些更改提交到数据库,则需要调用SaveChanges()。 –

+0

@Jason - 当然,但如果你想操纵POCOs,你可以推迟分贝写,直到你准备好了。这是我的观点。 –

回答

0

,如果你知道哪些chartresults补充和更新,那么你可以加载chart,并添加所有新chartresult实例。那么您可以查询现有的chartresults并单独更新它们。

或者您可以循环访问chartresults并确定是否需要添加或更新实体。

顺便说一句:如果EF通过EDMX或代码优先映射,这是无关紧要的。这只是你如何与实体交互,而不是如何映射实体。

+0

所以你基本上说,我想我必须这样做的方式实际上是我必须这样做的方式吗?即添加一个路由节点到上下文并调用.SaveChanges()将创建所有子实体...?... – Exitos

+0

SaveChanges()会将所有更改提交给与'dbcontext'相关联的实体。 –

+0

对吧,好吧,我最好尝试一下,找到一种干净的方式来做饭,并做到这一点!谢谢!.... – Exitos

相关问题