Надеюсь, я могу четко объяснить себя, поскольку я довольно новичок в async/await
и Task
.Асинхронное программирование с пользовательской структурой DTO и Entity Framework
В основном я иду по пути обучения асинхронному программированию, в то время как в принципе я полностью понимаю концепцию и когда это лучше всего применять.
Хотя в моем проекте я, возможно, немного поехал за борт. Поэтому мне всегда нравилось создавать свои собственные DTO, и мне не очень нравится использовать сторонний инструмент (AutoMapper), чтобы сделать это, но потенциально с большим сожалением, потому что я не уверен, как вернуть Task<DTO>
из ручного сопоставления.
Если я могу уточнить:
Client Repo
public sealed class ClientRepository : IClientRepository
{
private ClientConfigEntities _context;
public ClientRepository(ClientConfigEntities context)
{
_context = context;
}
public async Task<Client> AuthenticateAsync(string apiKey, string password)
{
//Throws error because it cannot return Task<Client> from Client
return await MapClient.ToModel(_context.tbl_Client
.FirstOrDefaultAsync(c => c.ApiKey == apiKey
&& c.Password == password));
}
}
Mapping
public static class MapClient
{
public static Client ToModel(tbl_Client source)
{
return (source != null) ? new Client
{
Id = source.Id,
ApiKey = source.ApiKey,
ApiURL = source.ApiURL,
ClientKey = source.ClientKey,
Password = source.Password,
RetainMeApiKey = source.RetainMeApiKey,
Secret = source.Secret
}
: null;
}
}
У меня также есть другая абстракция AuthenticationService
которая затем вызывается в Controller
- позволяет мне чтобы скрыть сложность.
С вышеуказанным я попытался вернуть Task<Client>
в методе сопоставления static
, но я уверен, что, как вы знаете, это вызывает проблемы с типом.
Каков наилучший подход для возврата асинхронного Task<Client>?
действительно надеюсь, что кто-то может дать мне понять, как и почему?
Очень ценивший,
Благодарим за помощь, +1 за подсказку метода расширения. –