From 86a7802ada31c12dc5be1795e88061c8960265c5 Mon Sep 17 00:00:00 2001 From: Alexey Bannov Date: Mon, 17 May 2021 19:32:05 +0300 Subject: [PATCH] crm: refactoring --- .../ASC.CRM/Server/Core/Dao/ContactDao.cs | 42 +++++++++---------- .../ASC.CRM/Server/Core/Dao/ContactInfoDao.cs | 18 +++++--- .../Server/Core/Dao/DealMilestoneDao.cs | 4 +- .../Core/Dao/TaskTemplateContainerDao.cs | 2 + 4 files changed, 37 insertions(+), 29 deletions(-) diff --git a/products/ASC.CRM/Server/Core/Dao/ContactDao.cs b/products/ASC.CRM/Server/Core/Dao/ContactDao.cs index 15c979fc5e..290a87619a 100644 --- a/products/ASC.CRM/Server/Core/Dao/ContactDao.cs +++ b/products/ASC.CRM/Server/Core/Dao/ContactDao.cs @@ -1210,22 +1210,24 @@ namespace ASC.CRM.Core.Dao public void UpdateContactStatus(IEnumerable contactid, int statusid) { - foreach (var item in contactid) + var tx = CrmDbContext.Database.BeginTransaction(); + + foreach (var id in contactid) { - var itemToUpdate = new DbContact - { - Id = item, - StatusId = statusid, - TenantId = TenantID - }; + var dbEntity = CrmDbContext.Contacts.Find(id); - CrmDbContext.Attach(itemToUpdate); - CrmDbContext.Entry(itemToUpdate).Property(x => x.StatusId).IsModified = true; + if (dbEntity.TenantId != TenantID) + throw new ArgumentException(); + dbEntity.Id = id; + dbEntity.StatusId = statusid; + } CrmDbContext.SaveChanges(); + tx.Commit(); + // Delete relative keys _cache.Remove(new Regex(TenantID.ToString(CultureInfo.InvariantCulture) + "contacts.*")); } @@ -1307,25 +1309,20 @@ namespace ASC.CRM.Core.Dao { if (contactId <= 0) throw new ArgumentException(); - var itemToUpdate = new DbContact - { - Id = contactId, - IsShared = isShared ? ShareType.ReadWrite : ShareType.None, - TenantId = TenantID - }; + var dbEntity = CrmDbContext.Contacts.Find(contactId); + + dbEntity.IsShared = isShared ? ShareType.ReadWrite : ShareType.None; - CrmDbContext.Attach(itemToUpdate); - CrmDbContext.Entry(itemToUpdate).Property(x => x.IsShared).IsModified = true; CrmDbContext.SaveChanges(); - } public int SaveContact(Contact contact) { var result = SaveContactToDb(contact); - _factoryIndexerContact.Index(Query(CrmDbContext.Contacts) - .Where(x => x.Id == contact.ID).Single()); + var dbEntity = CrmDbContext.Contacts.Find(contact.ID); + + _factoryIndexerContact.Index(dbEntity); // Delete relative keys _cache.Remove(new Regex(TenantID.ToString(CultureInfo.InvariantCulture) + "contacts.*")); @@ -1537,8 +1534,9 @@ namespace ASC.CRM.Core.Dao _crmSecurity.DemandDelete(contact); - _factoryIndexerContact.Delete(Query(CrmDbContext.Contacts) - .Where(x => x.Id == contactID).Single()); + var dbEntity = CrmDbContext.Contacts.Find(contactID); + + _factoryIndexerContact.Delete(dbEntity); DeleteBatchContactsExecute(new List() { contact }); diff --git a/products/ASC.CRM/Server/Core/Dao/ContactInfoDao.cs b/products/ASC.CRM/Server/Core/Dao/ContactInfoDao.cs index f667ee076b..51fdbaead7 100644 --- a/products/ASC.CRM/Server/Core/Dao/ContactInfoDao.cs +++ b/products/ASC.CRM/Server/Core/Dao/ContactInfoDao.cs @@ -111,8 +111,12 @@ namespace ASC.CRM.Core.Dao { var result = UpdateInDb(contactInfo); - _factoryIndexerContactInfo.Update(Query(CrmDbContext.ContactsInfo) - .Where(x => x.ContactId == contactInfo.ID).Single()); + var dbEntity = Query(CrmDbContext.ContactsInfo) + .AsNoTracking() + .Where(x => x.ContactId == contactInfo.ID) + .Single(); + + _factoryIndexerContactInfo.Update(dbEntity); return result; } @@ -135,7 +139,7 @@ namespace ASC.CRM.Core.Dao TenantId = TenantID }; - CrmDbContext.ContactsInfo.Update(itemToUpdate); + CrmDbContext.Update(itemToUpdate); CrmDbContext.SaveChanges(); @@ -149,11 +153,12 @@ namespace ASC.CRM.Core.Dao contactInfo.ID = id; - var dbContactInfo = Query(CrmDbContext.ContactsInfo) + var dbEntity = Query(CrmDbContext.ContactsInfo) + .AsNoTracking() .Where(x => x.ContactId == contactInfo.ID) .Single(); - _factoryIndexerContactInfo.Index(dbContactInfo); + _factoryIndexerContactInfo.Index(dbEntity); return id; } @@ -204,7 +209,8 @@ namespace ASC.CRM.Core.Dao public List GetList(int contactID, ContactInfoType? infoType, int? categoryID, bool? isPrimary) { - var items = Query(CrmDbContext.ContactsInfo); + var items = Query(CrmDbContext.ContactsInfo) + .AsNoTracking(); if (contactID > 0) items = items.Where(x => x.ContactId == contactID); diff --git a/products/ASC.CRM/Server/Core/Dao/DealMilestoneDao.cs b/products/ASC.CRM/Server/Core/Dao/DealMilestoneDao.cs index 393827954b..5850571746 100644 --- a/products/ASC.CRM/Server/Core/Dao/DealMilestoneDao.cs +++ b/products/ASC.CRM/Server/Core/Dao/DealMilestoneDao.cs @@ -79,7 +79,9 @@ namespace ASC.CRM.Core.Dao for (int index = 0; index < ids.Length; index++) { - var itemToUpdate = Query(CrmDbContext.DealMilestones).FirstOrDefault(x => x.Id == ids[index]); + var itemToUpdate = CrmDbContext.DealMilestones.Find(ids[index]); + + if (itemToUpdate.TenantId != TenantID) continue; itemToUpdate.SortOrder = index; diff --git a/products/ASC.CRM/Server/Core/Dao/TaskTemplateContainerDao.cs b/products/ASC.CRM/Server/Core/Dao/TaskTemplateContainerDao.cs index bb359f29f0..0c2b0123fc 100644 --- a/products/ASC.CRM/Server/Core/Dao/TaskTemplateContainerDao.cs +++ b/products/ASC.CRM/Server/Core/Dao/TaskTemplateContainerDao.cs @@ -226,6 +226,8 @@ namespace ASC.CRM.Core.Dao { var dbEntity = CrmDbContext.TaskTemplateContainer.Find(id); + if (dbEntity.TenantId != TenantID) return; + CrmDbContext.Remove(dbEntity); CrmDbContext.SaveChanges();