У меня есть класс домена Case, в котором есть несколько зависимых таблиц
public class Case
{
public int CaseId { get; set; }
public string Name { get; set; }
public DateTime StartDateTime { get; set; }
public DateTime? EndDateTime { get; set; }
public virtual ICollection<CaseUser> CaseUsers { get; set; }
public virtual ICollection<Sector> Sectors { get; set; }
public virtual ICollection<CasePoaSerie> CasePoaSeries { get; set; }
public virtual ICollection<Pod> Pods { get; set; }
public virtual ICollection<Poa> Poas { get; set; }
public Case()
{
CaseUsers = new Collection<CaseUser>();
Sectors = new Collection<Sector>();
CasePoaSeries = new Collection<CasePoaSerie>();
Pods = new Collection<Pod>();
Poas = new Collection<Poa>();
}
}
Предположим, что в этой таблице 3 строки данных, и мой метод репозитория возвращает все эти 3 строки со значениями всех других зависимых таблиц (CaseUsers, Sectors, CasePoaSeries, Pods, Poas). Я перевожу эту модель предметной области в модель представления в своем классе клиента службы.
Мой код переводчика
public static class CaseTranslator
{
public static Case UpdateToDomain(Models.Case modalcase)
{
var domaincase = new Case()
{
CaseId = modalcase.CaseId,
EndDateTime = modalcase.EndDateTime,
Name = modalcase.Name,
StartDateTime = modalcase.StartDateTime,
};
modalcase.CaseUsers.ForEach(x => domaincase.CaseUsers.Add(CaseUserTranslator.UpdateToDomain(x)));
modalcase.CasePoaSeries.ForEach(x => domaincase.CasePoaSeries.Add(CasePoaSeriesTranslator.UpdateToDomain(x)));
modalcase.Sectors.ForEach(x => domaincase.Sectors.Add(SectorTranslator.UpdateToDomain(x)));
modalcase.Poas.ForEach(x => domaincase.Poas.Add(PoasTranslator.UpdateToDomain(x)));
return domaincase;
}
public static Models.Case UpdateToModel(Case domaincase)
{
if (domaincase == null)
{
return null;
}
var modalcase = new Models.Case()
{
CaseId = domaincase.CaseId,
EndDateTime = domaincase.EndDateTime,
Name = domaincase.Name,
StartDateTime = domaincase.StartDateTime,
};
domaincase.CaseUsers.ForEach(x=> modalcase.CaseUsers.Add(CaseUserTranslator.UpdateToModel(x)));
domaincase.Poas.ForEach(x => modalcase.Poas.Add(PoasTranslator.UpdateToModel(x)));
domaincase.Pods.ForEach(x => modalcase.Pods.Add(PodsTranslator.UpdateToModel(x)));
domaincase.CasePoaSeries.ForEach(x => modalcase.CasePoaSeries.Add(CasePoaSeriesTranslator.UpdateToModel(x)));
domaincase.Sectors.ForEach(x => modalcase.Sectors.Add(SectorTranslator.UpdateToModel(x)));
return modalcase;
}
}
Каждый переводчик следует тому же шаблону.
Мой код обслуживания клиентов
public List<Case> GetCasesByUserId(int userId)
{
var activeCases = new List<Case>();
var cases = _caseRepository.GetActiveCasesForUser(userId);
cases.ForEach(o=> activeCases.Add(CaseTranslator.UpdateToModel(o)));
return activeCases;
}
Моя проблема
Когда я использую LocalDb в качестве источника данных, мой метод очень быстрый, см. Скриншоты ниже.
Данные из localdb занимают ок. 124 мс чтобы получить данные.
localdb извлечение данных
Моя система занимает ок. 392 мс перевести эти данные.
localdb перевод данных
Теперь, если я изменю свой источник данных на лазурный дБ, это займет ок. 1,069 мс получить данные из базы данных.
поиск данных по Azuredb
Моя система занимает ок. 2,62,604 мс перевести эти данные, которые получены из azuredb.
перевод данных azuredb
Мы ясно видим, что переводчику требуется больше времени (просто недопустимая задержка) для обработки того же объема данных, который очень быстро транслируется, если он поступил из localdb.
Сейчас я в замешательстве, так как не знаю, в чем реальная проблема.
Что-то не так с моим кодом переводчика или это Azure db отвечает за эту задержку?
Дополнительная информация. Я использую подход кода структуры сущности вначале с миграциями Мануэля. Лазурная БД, которую я использую, является бесплатным планом.
Лазурный план
Мы используем общую плоскость, веб-сайт работает на сервере Azure, который является бесплатным планом, а база данных приложения работает на сервере Azure со стандартным планом.