У меня в WebApi довольно большой запрос, который фильтрует данные из разных моделей для отправки их в объект DTO в FrontEnd (Angular).
Я думаю, что DTO может быть правильным подходом, потому что это не такНеобходим для интерфейса, чтобы получить все параметры от всех моделей.
Моя проблема состоит в том, чтобы сопоставить объект DTO с моими моделями WebApi.Я пробовал Automapper из NugetPackages, но он не работал.Я также слышал, что AutoMapper не является правильным выбором, когда проекты становятся все больше и больше.
Ниже приведен код для моего объекта DTO, запроса и моделей:
public class ApplicationSettingsDto
{
public string KeyName { get; set; }
public string Wert { get; set; }
public string DefaultValue { get; set; }
public string Description { get; set; }
}
Модели:
public partial class ApplicationSettings
{
public string KeyName { get; set; }
public string Wert { get; set; }
public int Typ { get; set; }
public string DisplayOrder { get; set; }
}
public partial class ApplicationSettingsDefaults
{
public Guid Id { get; set; }
public string KeyName { get; set; }
public string Value { get; set; }
public int ProduktOption { get; set; }
}
public partial class Text
{
public string KeyName { get; set; }
public string Sprache { get; set; }
public string Text1 { get; set; }
public DateTime LetzteAenderung { get; set; }
}
Запрос:
public IQueryable Description()
{
int produktOption = GetProduktOption();
var query = from appl in _repositoryContext.ApplicationSettings
from text in _repositoryContext.Text
from defaults in _repositoryContext.ApplicationSettingsDefaults
//filter DefaultValues
where appl.KeyName.Equals(defaults.KeyName) &&
(defaults.ProduktOption.Equals(produktOption) || defaults.ProduktOption.Equals(65535))
//Filter TextValues
where EF.Functions.Like(text.KeyName, "%" + appl.KeyName) ||
EF.Functions.Like(text.KeyName, "%" + appl.KeyName + "$Descr")
where EF.Functions.Like(text.Sprache, "de-DE")
select new ApplicationSettingsDto()
{
KeyName = appl.KeyName,
Wert = appl.Wert,
DefaultValue = defaults.Value,
Description = text.Text1
}
into output orderby output.KeyName select output;
return query;
}
Так что этот вопрос не о детальной реализации, а только о рекомендациях по реализации DTO, потому что отображение может быть проблемой в * ss, как в моемпример.
Я открыт для новых идей или моделей, которые пока не знаю, чтобы попытаться справиться с подобными проблемами.
Заранее спасибо;)