Я столкнулся с ошибкой при вставке массовых данных с помощью функции upsert и не могу понять, как ее исправить. Кто-нибудь знает, что здесь не так? По сути, программа берет данные из базы данных SQL-сервера и загружает их в корзину Couchbase на инстансе Amazon. Сначала он начинает загружаться, но примерно через 10 или около того он вылетает.
Моя ошибка заключается в следующем: Коллекция была изменена; операция перечисления может не выполняться. Вот снимки экрана с ошибкой (извините, ошибка реплицируется только на другом моем экземпляре сервера Amazon, а не локально): http://imgur.com/a/ZJB0c
Вот функция, которая вызывает метод upsert. Это вызывается несколько раз, так как я получаю только части данных за раз, поскольку таблица SQL очень велика.
private void receiptItemInsert(double i, int k) {
const int BATCH_SIZE = 10000;
APSSEntities entity = new APSSEntities();
var data = entity.ReceiptItems.OrderBy(x => x.ID).Skip((int)i * BATCH_SIZE).Take(BATCH_SIZE);
var joinedData = from d in data
join s in entity.Stocks
on new { stkId = (Guid)d.StockID } equals new { stkId = s.ID } into ps
from s in ps.DefaultIfEmpty()
select new { d, s };
var stuff = joinedData.ToList();
var dict = new Dictionary<string, dynamic>();
foreach (var ri in stuff)
{
Stock stock = new Stock();
var ritem = new CouchModel.ReceiptItem(ri.d, k, ri.s);
string key = "receipt_item:" + k.ToString() + ":" + ri.d.ID.ToString();
dict.Add(key, ritem);
}
entity.Dispose();
using (var cluster = new Cluster(config))
{
//open buckets here
using (var bucket = cluster.OpenBucket("myhoney"))
{
bucket.Upsert(dict); #CRASHES HERE
}
}
}