Compartilhar via


Limitações do provedor do Azure Cosmos DB do EF Core

O provedor de banco de dados do Azure Cosmos DB tem como destino o repositório NoSQL do Azure Cosmos DB, que é um banco de dados de documentos. A maioria dos provedores do EF Core tem como destino bancos de dados relacionais. Bancos de dados de documentos e bancos de dados relacionais comportam-se de maneiras essencialmente diferentes. O EF Core não tenta ocultar essas diferenças; em vez disso, o EF Core fornece padrões comuns que podem ser usados com êxito em ambos os tipos de banco de dados, juntamente com recursos seguidos para um provedor específico que seguem as práticas recomendadas para um determinado tipo de banco de dados. Se um recurso do EF Core for um poço de falha para um determinado tipo de banco de dados, normalmente o provedor de banco de dados não implementará esse recurso e, em vez disso, ajudará a voltar os usos para uma abordagem de poço de sucesso.

Os padrões comuns do EF Core que não se aplicam ou são um poço de falha ao usar um banco de dados de documentos incluem:

Aviso

O SDK do Azure Cosmos DB, usado pelo provedor EF usa, não dá suporte a E/S síncrona. Como resultado, APIs síncronas do EF, assim como ToList ou SaveChanges lançam a versão 9.0 e superior; sempre use métodos assíncronos ao usar o EF. As versões anteriores do EF davam suporte às APIs síncronas chamando o .Wait() no Task retornado; isso é conhecido como "síncrono sobre assíncrono" e é uma técnica altamente desencorajada que pode levar a deadlocks. Confira a nota de alteração significativa do EF 9.0 para mais informações.

Além das diferenças nos bancos de dados relacionais e de documentos e das limitações no SDK, o provedor do EF Core para NoSQL do Azure Cosmos DB não inclui tudo o que poderia ser implementado usando a combinação do EF Core e do SDK do Azure Cosmos DB. Os possíveis aprimoramentos nessa área são rastreados por problemas no repositório GitHub do EF Core marcado com o rótulo area-cosmos A melhor maneira de indicar a importância de um problema é votar () nele. Esses dados serão alimentados no processo de planejamento para a próxima versão.