Я пишу небольшое приложение, которое много обрабатывает фиды. Я хочу использовать LINQ EF для этого, так как скорость не проблема, это однопользовательское приложение, и, в конце концов, будет использоваться только один раз в месяц.
Мои вопросы связаны с лучшим способом выполнения массовых вставок с использованием LINQ EF.
После анализа входящего потока данных я получаю список значений. Поскольку конечный пользователь может попытаться импортировать некоторые дубликаты данных, я бы хотел «очистить» данные во время вставки, а не читать все записи, делать цикл for, отклонять записи и, наконец, импортировать оставшуюся часть.
Вот что я сейчас делаю:
DateTime minDate = dataTransferObject.Min(c => c.DoorOpen);
DateTime maxDate = dataTransferObject.Max(c => c.DoorOpen);
using (LabUseEntities myEntities = new LabUseEntities())
{
var recCheck = myEntities.ImportDoorAccess.Where(a => a.DoorOpen >= minDate && a.DoorOpen <= maxDate).ToList();
if (recCheck.Count > 0)
{
foreach (ImportDoorAccess ida in recCheck)
{
DoorAudit da = dataTransferObject.Where(a => a.DoorOpen == ida.DoorOpen && a.CardNumber == ida.CardNumber).First();
if (da != null)
da.DoInsert = false;
}
}
ImportDoorAccess newIDA;
foreach (DoorAudit newDoorAudit in dataTransferObject)
{
if (newDoorAudit.DoInsert)
{
newIDA = new ImportDoorAccess
{
CardNumber = newDoorAudit.CardNumber,
Door = newDoorAudit.Door,
DoorOpen = newDoorAudit.DoorOpen,
Imported = newDoorAudit.Imported,
RawData = newDoorAudit.RawData,
UserName = newDoorAudit.UserName
};
myEntities.AddToImportDoorAccess(newIDA);
}
}
myEntities.SaveChanges();
}
Я также получаю эту ошибку:
System.Data.UpdateException не обрабатывается
Message = "Невозможно обновить EntitySet ImportDoorAccess", так как он имеет DefiningQuery и в элементе нет элемента для поддержки текущей операции. "
Source = "System.Data.SqlServerCe.Entity"
Что я делаю не так?
Любые указатели приветствуются.