C# 使用实体框架打开的现有dataReader保存更改

C# 使用实体框架打开的现有dataReader保存更改,c#,entity-framework,transactions,datareader,C#,Entity Framework,Transactions,Datareader,我试图从我的数据库中读取一堆音乐曲目,在文件系统中编辑它们,然后将更改保存到数据库中。我正在处理大约200万行,根据我的经验,EF中的大规模更新非常缓慢。再加上如果发生错误,数据库中会有大量不准确的数据 所以我使用了一个查询,然后我得到了该查询的一个枚举器,并将模型发送出去进行工作。在发送了这么多次记录后,我尝试进行必要的更改并保存它们。像这样: foreach (var track in CurrentBatch) { if (track.MusicTr

我试图从我的数据库中读取一堆音乐曲目,在文件系统中编辑它们,然后将更改保存到数据库中。我正在处理大约200万行,根据我的经验,EF中的大规模更新非常缓慢。再加上如果发生错误,数据库中会有大量不准确的数据

所以我使用了一个查询,然后我得到了该查询的一个枚举器,并将模型发送出去进行工作。在发送了这么多次记录后,我尝试进行必要的更改并保存它们。像这样:

foreach (var track in CurrentBatch)
        {
            if (track.MusicTrackFormatID == StartInfo.INPUTFORMATID1)
            {
                track.MusicTrackFormatID = StartInfo.OUTPUTFORMATID1;
                int strLeng= track.MusicTrackPath.Length;
                track.MusicTrackPath.Remove(strLeng - 2, 2);
                track.MusicTrackPath += StartInfo.OUTPUTFORMATID1.ToString();
            }
            else
            {
                track.MusicTrackFormatID = StartInfo.OUTPUTFORMATID2;
                int strLeng = track.MusicTrackPath.Length;
                track.MusicTrackPath.Remove(strLeng - 2, 2);
                track.MusicTrackPath += StartInfo.OUTPUTFORMATID2.ToString();
            }
            _live.MusicTrackFiles.Find(track.MusicTrackFileID).MusicTrackFilename=track.MusicTrackFilename;
            _live.MusicTrackFiles.Find(track.MusicTrackFileID).MusicTrackFilename = track.MusicTrackPath;

        }
_live.SaveChanges();
按请求编辑: 稍微描述一下上面的内容_live是一个live数据类型,它继承DbContext。CurrentBatch是MusicTrack文件的列表。MusicTrackFile是表示MusicTrackFiles表中记录的模型

dataReader是使用枚举器生成的,枚举器的使用方式如下:

if (CurrentBatch.Count >= BATCHSIZE)
        {
            saveBatch();
            CurrentBatch.Clear();
        }
            _queryEnumerator.MoveNext();
            CurrentBatch.Add(_queryEnumerator.Current);
            return _queryEnumerator.Current;
上述枚举数是从IQueryable中获取的

问题是,我收到一个错误,说明datareader正在使用连接,我需要关闭它。我尝试过使用MARS,我尝试过使用_live.Database.BeginTransaction创建新事务。所有这些都行不通

有没有关于如何保存中期阅读的想法


*注意:我欢迎代码评论

什么数据阅读器?你住的是什么类型的?什么是当前批次@reggaeguitar我编辑了我上面的帖子来回答你们的问题,还有更多。