У меня есть следующий код, который обновляет/добавляет данные в базу данных SQL Server CE с EF6, которая отлично работает для небольшого количества записей. Однако, когда объем записей превышает 1000 ~ 2000, транзакция становится очень медленной (10 ~ 15 секунд). Есть ли способ его оптимизировать?SQL Server CE EF Оптимизация
Database.DefaultConnectionFactory = new SqlCeConnectionFactory("System.Data.SqlServerCe.4.0", "", MyProject.ConnectionString);
ProjectContext context = new ProjectContext();
context.Configuration.AutoDetectChangesEnabled = false;
context.Configuration.ValidateOnSaveEnabled = false;
using (var db = new ProjectContext())
{
foreach (var item in MyProject.Brands)
{
if (!db.Brands.Any(i => i.Name == item.Name))
{
// Add
db.Brands.Add(item);
}
else
{
// Update
var found = db.Brands.First(i => i.Name == item.Name);
found = item;
}
}
db.SaveChangesAsync();
Попробуйте создать словарь торговых марок вместо того, чтобы просматривать все их каждый раз. В противном случае используйте 'FirstOrDefault', чтобы получить доступ к« Бренду »одновременно с выяснением, существует ли он или нет. –
Также я не уверен 'found = item;' делает то, что вы думаете, что он делает ... –
спасибо за ответ, я не уверен в словаре, так как я планировал расширить транзакцию базы данных до 100000 записей. Кстати, найденный обновляет строку после ее обнаружения. – Jim