有没有人对.SaveChanges()方法的使用有一些很好的信息?
尝试在我的数据上下文对象上使用.SaveChanges()方法时遇到各种问题.我从现有数据源获取数据,创建适当的EntityFramework/DataService对象,用数据填充这些创建的对象,将这些对象添加到上下文,然后通过调用.SaveChanges保存该数据.
我提出的场景(以及与它们相关的问题)就是这样......在每个场景中,我都有一个foreach循环,它从DataTable中的行获取数据并生成对象,将它们作为上下文附加到上下文中他们去.(注意:三个对象是"成员"和两个通过SetLink调用连接的"地址") - 基本上这是一个转换工具,用于从一个数据存储中获取数据并将其按压到数据服务公开的数据存储中.
在foreach循环结束时调用.SaveChanges(),不带任何参数(即在循环外部)
OutOfMemory错误约1/3(90,000次保存中有30,000次) - 不确定如何发生这种情况,因为每个保存项目都是对数据库的单独SQL调用,内存耗尽的是什么?
每个循环调用.SaveChanges(),不带任何参数
这是有效的,但绝对是绝对的(90,000次保存需要8小时)
在foreach循环结束时调用.SaveChanges(SaveChangesOption.Batch)一次
相同的OutOfMemory错误,但没有任何保存到数据库
每个循环调用一次.SaveChanges(SaveChangesOption.Batch)
404未找到错误
每10个循环调用一次.SaveChanges(SaveChangesOption.Batch)
400错误请求错误(偶尔)
OutOfMemory经过多次改动
许多随机尝试每个循环创建一次上下文,或者在循环开始时将其作为变量或将其作为可用的私有成员变量.
不同的结果,无法量化,没有真正那么好
在执行像这样的大数据加载时,从客户端对象调用.SaveChanges()的首选方法是什么?有什么我不知道如何.SaveChanges()的工作原理?任何人都可以提供有关如何使用此功能以及通过数据服务保存数据的限制(如果有)的更多详细信息?围绕.SaveChanges()方法调用是否有任何最佳实践?是否有关于.SaveChanges()方法调用的特别好的文档?