我试图从我的数据库中读取一堆音乐曲目,在文件系统上编辑它们,然后将更改保存在数据库中。我正在使用大约2米的行,并且在我的体验中,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是MusicTrackFiles的列表。 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()
进行新的交易。所有这些都不起作用。
关于如何保存中读的任何想法?
*注意我欢迎代码批评