C# 我可以先关闭EF代码的链接行为吗?

C# 我可以先关闭EF代码的链接行为吗?,c#,entity-framework,C#,Entity Framework,不确定我是否错误地理解了EF代码最初是如何工作的,或者是设置错误了。我已经创建了一个图表POCO,其中有许多图表结果。简单的一对多 当我这样做的时候 Chart myChart = new Chart(); myChart.ChartResults.Add(new ChartResult(){Pos=1}); myChart.ChartResults.Add(new ChartResult(){Pos=2}); context.Charts.Add(myChart); context.Save(

不确定我是否错误地理解了EF代码最初是如何工作的,或者是设置错误了。我已经创建了一个图表POCO,其中有许多图表结果。简单的一对多

当我这样做的时候

Chart myChart = new Chart();
myChart.ChartResults.Add(new ChartResult(){Pos=1});
myChart.ChartResults.Add(new ChartResult(){Pos=2});
context.Charts.Add(myChart);
context.Save();
我得到一个添加的图表,然后它撕开所有的图表结果并将其添加到数据库中。这是非常聪明的,我相信,但问题是在图表结果有时我想添加,有时我想简单地更新参考。但是,如果没有:

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?

如果您知道要添加的
chartresults
和要更新的
图表,则可以加载
图表
并添加所有新的
chartresult
实例。然后,您可以查询现有的
图表结果
,并分别进行更新

或者,您可以循环查看
图表结果
,并确定是否需要添加或更新实体


顺便说一句:如果EF首先通过EDMX或代码进行映射,则这与此无关。这只是您与实体交互的方式,而不是如何映射实体。

您不必将myChart添加到上下文中,也不必立即保存它。这允许您以任何方式操作POCO,直到您准备好写入数据库为止。但是,在上面的示例中,EF正按照您的要求执行。@HughJones在某个时候需要将图表实例添加到上下文中,如果您想将这些更改提交到数据库,则需要调用
SaveChanges()
。@Jason-当然,但是,如果您想操作POCO,可以将db写入延迟到准备就绪。这就是我的观点。是的,我假设那是不言而喻的。那么你基本上是说我认为我必须这样做的方式实际上就是我必须这样做的方式?例如,向上下文添加路由节点并调用.SaveChanges()将创建所有子实体…?…
SaveChanges()
将所有更改提交给与
dbcontext
关联的实体。好吧,好吧,我最好试着找到一种干净的方法来完成并完成它!谢谢