我有一个通用IDocumentDbRepository存储库,用于为 DocumentDB 提供基本的 CRUD 操作,并为具有特定实体的附加操作提供特定存储库,这些实体继承或实现了此接口和类。 public interface IDocumentDbRepository<T> where T : class{ //IEnumerable<T> GetItems(); Task<IEnumerable<T>> GetItemsAsync(); Task<T> GetItemAsync(T id); Task<T> AddDocumentAsync(T item); Task<T> UpdateDocumentAsync(T id, T item); Task DeletedocumentAsync(T id);}public class DocumentDbRepository<T> : IDocumentDbRepository<T> where T : class{ private readonly string AuthKey; private readonly string EndpointUri; private readonly string DatabaseId; private readonly string CollectionId; private static DocumentClient client; public DocumentDbRepository(IOptions<DocumentDbSettings> DocumentDbConfig) { this.DatabaseId = DocumentDbConfig.Value.DatabaseName; this.CollectionId = DocumentDbConfig.Value.CollectionName; this.AuthKey = DocumentDbConfig.Value.AuthKey; this.EndpointUri = DocumentDbConfig.Value.EndpointUri; client = new DocumentClient(new Uri(EndpointUri), AuthKey); }public async Task<IEnumerable<T>> GetItemsAsync(){ IDocumentQuery<T> query = client.CreateDocumentQuery<T>( UriFactory.CreateDocumentCollectionUri(DatabaseId, CollectionId)) .AsDocumentQuery(); List<T> results = new List<T>(); while (query.HasMoreResults) { results.AddRange(await query.ExecuteNextAsync<T>()); } return results;} // public IEnumerable<T> GetItems() // { // var results = client.CreateDocumentQuery<T>//(UriFactory.CreateDocumentCollectionUri(DatabaseId, CollectionId)).ToList(); // return results; // }//methods在我的特定Employee存储库中,我的目标是仅返回类型的文档Employeepublic interface IEmployeeRepository : IDocumentDbRepository<Employee>{ List<Employee> GetAllEmployees();}
1 回答
www说
TA贡献1775条经验 获得超8个赞
好的,有几件事。
首先,你应该永远不会调用.ToList();
上CreateDocumentQuery
那样。它将通过线路进行多个同步调用,以返回数据库中的每个文档。这将导致疯狂的 RU/s 和非常糟糕的性能。
使用AsDocumentQuery
和调用ExecuteNextAsync
while query.HasMoreResults
。
其次,当您调用该ToList()
方法时,所有内容都作为 Employee 返回,因为您以这种方式查询它。您基本上是说,“将这个集合中的所有内容作为 Employee 归还给我,然后从那个归还我的 Employees”。在这个阶段,他们都是员工。
您真正需要的是type
文档上的某种属性,您可以在ToList
调用之前使用这些属性进行查询。
我建议您检查Cosmoaut 中的收藏共享是如何工作的。听起来完全像你需要的东西。
下面介绍了如何在不阻塞线程的情况下异步调用 ToList 方法。
免责声明:我是宇航员的创造者。
- 1 回答
- 0 关注
- 192 浏览
添加回答
举报
0/150
提交
取消