Я недавно разработал приложение на C # с использованием Linq.
Я получаю из внешней базы данных список профилей, которые мне нужно обработать, некоторые из них являются новыми, а некоторые уже находятся в базе данных и требуют обновления.
Что я делаю сегодня, так это просматриваю список профилей и проверяю каждый профиль, если таковой существует, я обновляю, иначе я вставляю - это решение работает нормально.
Я уверен, что есть способ использовать массовую вставку / обновление, например UPDATE ON DUPLICATE, таким образом я могу сэкономить время, так как файлы, которые я получаю, огромны, а известно, что массовая вставка / обновление имеет лучшую производительность. Я хотел бы избежать итерации, которую я сейчас использую.
insertall не работает для уже сохраненных строк, мне нужно сочетание как update, так и insert
Вот мой код, Ваша помощь высоко ценится.
foreach (Profile tmpProfile in profiles)
{
try
{
var matchedProfile = (from c in db.ProfileEntities
where c.ProfileId == tmpProfile.Id
select c).SingleOrDefault();
if (matchedProfile == null)
{
//Insert
db.ProfileEntities.InsertOnSubmit(EntityMapper.ToEntity(tmpProfile));
}
else
{
//Update
EntityMapper.ToEntity(ref matchedProfile, tmpProfile);
}
}
catch (System.Data.SqlServerCe.SqlCeException sqlExec)
{
}
catch (Exception e)
{
}
}
db.SubmitChanges();