public async Task AddQueryAsync(string queryName, string cursorName) { using (var entityContext = new EntityContext()) { var query = await GetQueryAsync(queryName, entityContext); if (query == null) { var cursorService = new CursorService(); await cursorService.EnsureExistsAsync(cursorName); var cursor = await cursorService.GetAsync(cursorName); query = new PackageQueryEntity { Name = queryName, CursorKey = cursor.CursorKey, }; entityContext.PackageQueries.Add(query); await entityContext.SaveChangesAsync(); } else if (query.Cursor.Name != cursorName) { throw new ArgumentException($"The query {queryName} is not using cursor {cursorName}."); } } }
private static async Task <List <PackageQueryMatchEntity> > GetExistingMatchesAsync(EntityContext entityContext, PackageQueryEntity query, IReadOnlyList <PackageIdentity> identities) { var identityStrings = new HashSet <string>(identities.Select(x => x.Value)); var queryKey = query.PackageQueryKey; var existingIdentities = await entityContext .PackageQueryMatches .Include(x => x.Package) .Include(x => x.Package.PackageRegistration) .Where(x => identityStrings.Contains(x.Package.Identity) && x.PackageQueryKey == queryKey) .ToListAsync(); return(existingIdentities); }