Похоже, вы используете Entity Framework (6 или Core).В любом случае и
var siterecord = DB.Sites.Find(sitedata.Id);
и
DB.Entry(siterecord).State = EntityState.Modified;
являются избыточными, поскольку переменная siteData
исходит из
var allsites = DB.Sites.ToList();
Это не только загружает весьSite
таблица в памяти, но также EF change tracker хранит ссылку на каждый объект из этого списка.Вы можете легко проверить, что с помощью
var siterecord = DB.Sites.Find(sitedata.Id);
Debug.Assert(siterecord == sitedata);
Методы Find
(когда данные уже находятся в памяти) и Entry
являются быстрыми.Но проблема в том, что по умолчанию они запускают автоматический DetectChanges
, что приводит к квадратичной сложности времени - простыми словами, очень медленным.
Сказав это, просто удалите их:
if (OOBNo == split && SiteNo.Contains(OOBName))
{
sitedata.CabinOOB = oobdata.CabinOOB;
sitedata.TowerOOB = oobdata.TowerOOB;
sitedata.ManagedOOB = oobdata.ManageOOB;
sitedata.IssueDescription = oobdata.Description;
sitedata.TargetResolutionDate = oobdata.TargetResolutionDate;
Debug.Write("Updated Site ID/Name Record: " + sitedata.Id + "/" + sitedata.SiteName);
}
Таким образом, EF обнаружит изменения только один раз (до SaveChanges
), а также обновит только измененные поля записи.