任何人都不会有一些很好的信息的使用。SaveChanges()方法?

我遇到各种各样的问题时,尝试使用。SaveChanges()方法,在我的数据上下文对象。我把数据从现有数据来源,建立适当的EntityFramework/DataService对象,填充的那些创造物体的数据,加入这些对象的上下文,然后拯救这些数据通过电话。SaveChanges.

的情景我已经找到(和与之相关的问题),是因为这样...在每种情况下我有一个foreach循环也就是把数据从排在一个数据表而产生的对象,其中附有他们的上下文,因为他们去。(注:三个对象"成员"和两个"地址",是通过一个SetLink叫)-这基本上是一个转换的工具,把数据从一个数据存储和按摩到一个数据存储,暴露数据服务。

  • 呼叫。SaveChanges()没有任何参数一旦结束时foreach循环(即循环外)
    • 内存误差大约1/3的方式(30 000名出90 000名省)-不知道该怎么说的情况,虽然为每一个保存项目是一个单独的SQL呼吁的数据库,还有什么跑出来的记忆了?
  • 呼叫。SaveChanges()没有任何参数的每一次循环
    • 这一工作,但需要是绝对永远(8小时为节省90 000名)
  • 呼叫。SaveChanges(SaveChangesOption.批)一旦结束时foreach循环
    • 同样的内存的错误,但没有任何节省的数据库
  • 呼叫。SaveChanges(SaveChangesOption.批)一旦每个循环
    • 404未发现的错误
  • 呼叫。SaveChanges(SaveChangesOption.批)一旦每10循环
    • 400坏的请求的错误(有时)
    • 内存在一些itterations
  • 一些随机试图创建的背景下每一次循环,或把它作为一个变量在开始的循环,或把它作为私有成员的变量可用。
    • 不同的结果,无法量化的,没有真的那么好

什么是首选方法的呼吁。SaveChanges()从客户对象在做一个大型数据载这样吗?是不是有什么我没有得到关于如何。SaveChanges()工作的?任何人都可以提供更多的细节如何,一旦应该利用这一功能以及什么(如果有的话)是限制保存数据通过数据服务?是否有任何最佳实践。SaveChanges()方法打电话?是否有任何特别的良好的文件。SaveChanges()方法打电话?

有帮助吗?

解决方案

我没有大的经验中使用EntityFramework(只是一些随机实验),你有没有尝试过电话。SaveChanges()每n次迭代?

我的意思是像这样的东西:

int i = 0;
foreach (var item in collection)
{
    // do something with your data
    if ((i++ % 10) == 0)
        context.SaveChanges();
}
context.SaveChanges();

我知道它很丑陋,但这是第一个可能的解决办法,我来了。

其他提示

我使用EntityFramework上一个小小的项目也因此我非常感兴趣的问题。两个简单的问题:你有没有试图把缓存og的数据对象的属性?你有没有试图接近的属性,并创建了一个新的一期间的循环以释放记忆?

关于

Kenneth

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top