希望我能夠清楚地解釋我自己,因爲我對async/await
和Task
的新手很熟悉。使用自定義DTO和實體框架進行異步編程
基本上我正在走自學異步編程的道路,儘管從根本上說,我完全理解了這個概念,以及何時最適用。
雖然在我的項目中,我可能已經有點過度。所以我一直都很喜歡製作自己的DTO,而且我並不喜歡使用第三方工具(AutoMapper)來做到這一點,但可能會帶來很大的遺憾,因爲我不確定如何從手動映射返回Task<DTO>
。
如果我可以詳細說明:
客戶回購
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));
}
}
映射
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
- 讓我隱藏複雜性。
以上我已經試過在static
映射方法上返回一個Task<Client>
,但我相信你知道,它會拋出類型問題。
什麼是返回一個異步Task<Client>?
真希望有人可以給我深入瞭解如何以及爲什麼最好的方法?
大加讚賞,對什麼FirstOrDefaultAsync
回報
感謝您的幫助,對於擴展方法提示+1。 –