Ef Core Cosmos драйвер + CosmosClient. Не удалось прочитать данные с помощью CosmosClient с использованием EF Core - PullRequest
0 голосов
/ 27 марта 2020

Мы используем Ef Core в качестве ORM для выполнения операций с базой данных. Поскольку EF Core Cosmos не поддерживает массовые вставки в Cosmos, мы также используем Cosmos Client. Когда мы выполняем массовые вставки, мы используем следующий код:

    public async Task UploadAsync<T>(string databaseName, string containerName, Func<Container, IEnumerable<Task>> dbOperations)
    {
        var instanceUrl = //Commented out
        var primaryKey = //Commented out

        var options = new CosmosClientOptions
        {
            AllowBulkExecution = true,
            ConnectionMode = ConnectionMode.Gateway
        };

        using var client = new CosmosClient(instanceUrl, primaryKey, options);
        var container = client.GetContainer(databaseName, containerName);

        var operations = dbOperations(container);

        await Task.WhenAll(operations);
    }

Это работает отлично и позволяет нам очень быстро массово вставлять много данных в космос. Теперь мы хотим прочитать вставленные данные с помощью Entity Framework Core с нашим общим шаблоном репозитория c:

public async Task<IEnumerable<TEntity>> ReadAsync(Expression<Func<TEntity, bool>> predicate)
{
    return await _diagnostics.RunAsync(async () =>
    {
        var cts = new CancellationTokenSource();
        cts.CancelAfter(CancelRequestAfter);

        var queryable =  _dbContext.Set<TEntity>().Where(predicate);
        return await queryable.ToListAsync(cts.Token);
    });
}

Этот репозиторий работает, как и ожидалось, но только , если объект был сохраняется EF Core. Однако я могу читать документы, созданные EF Core с помощью Cosmos Client.

. Я начал изучать, почему наши запросы ничего не возвращают, сравнивая два документа в Azure Cosmos Data Explorer. Первый документ создается с помощью Cosmos client, а второй документ - с помощью EF Core. Единственное отличие, которое я могу заметить, это то, что EF Core автоматически добавляет что-то под названием "Discriminator" в наши документы. Поэтому я подозреваю, что это root причина ..

  • Может кто-нибудь проверить мой тезис? Если так, как я могу решить это?
  • Есть ли у EF Core какие-либо операции массовой вставки, такие как Cosmos Client?
...