Немного очертания того, что я пытаюсь выполнить. Мы храним локальную копию удаленной базы данных (сторонней) в нашем приложении. Чтобы загрузить информацию, мы используем api. В настоящее время мы загружаем информацию о расписании, которое затем вставляет новые записи в локальную базу данных или обновляет существующие записи. вот как он в настоящее время работаетОбновление Entity Framework/вставка нескольких объектов
public void ProcessApiData(List<Account> apiData)
{
// get the existing accounts from the local database
List<Account> existingAccounts = _accountRepository.GetAllList();
foreach(account in apiData)
{
// check if it already exists in the local database
var existingAccount = existingAccounts.SingleOrDefault(a => a.AccountId == account.AccountId);
// if its null then its a new record
if(existingAccount == null)
{
_accountRepository.Insert(account);
continue;
}
// else its a new record so it needs updating
existingAccount.AccountName = account.AccountName;
// ... continue updating the rest of the properties
}
CurrentUnitOfWork.SaveChanges();
}
Это прекрасно работает, однако он просто чувствует, как это может быть улучшено.
- Существует один из этих методов для каждого объекта, и все они выполняют одно и то же (просто обновляя разные свойства) или вставляя разные объекты. Было бы все равно сделать это более общим?
- Это просто похоже на множество запросов к базе данных, было бы так или иначе «Bulk» сделать это. Я посмотрел на этот пакет, который я видел на нескольких других сообщениях. https://github.com/loresoft/EntityFramework.Extended Но, похоже, основное внимание уделяется массовому обновлению одного свойства с тем же значением, или я могу сказать.
Любые предложения о том, как я могу улучшить это, были бы блестящими. Я все еще довольно новичок в C#, поэтому я все еще ищу лучший способ сделать что-то.
Я использую .net 4.5.2 и Entity Framework 6.1.3 с MSSQL 2014 в качестве серверной базы данных
AddRange не выполняет «Массовую вставку», а просто вызывает DetectChanges, что повышает производительность над добавлением. –
Спасибо @Hintham.Я отмечаю это как принятый ответ, так как он очень помог мне достичь окончательного решения. – tjackadams
Без проблем, рад, что это помогло – Hintham