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:
- Não há suporte para a migração de esquema, pois não há um esquema definido para os documentos. No entanto, pode haver outros mecanismos para lidar com formas de dados em evolução que fazem sentido com o NoSQL do Azure Cosmos DB, por exemplo, o padrão de controle de versão de esquema com o Azure Cosmos DB e a migração de dados do Azure Cosmos DB.
- Não há suporte para engenharia reversa (scaffolding) de um modelo de um banco de dados existente. Novamente, isso não é permitido porque não há nenhum esquema de banco de dados definido para scaffold. No entanto, consulte Usar a forma de documentos no banco de dados do Azure Cosmos DB para criar um esquema de scaffolding.
- Os conceitos de esquema definidos no modelo EF, como índices e restrições, são ignorados ao usar um banco de dados de documentos, pois não há nenhum esquema. Observe que o NoSQL do Azure Cosmos DB executa a indexação automática de documentos.
- Não há suporte para o carregamento de gráficos de entidades relacionadas de documentos diferentes. Os bancos de dados de documentos não são projetados para executar junções em muitos documentos; isso seria muito ineficiente. Em vez disso, é mais comum desnormalizar os dados para que tudo o que é necessário esteja em um ou um pequeno número de documentos. No entanto, há algumas formas de relações entre documentos que podem ser tratadas – consulte Suporte de inclusão limitada para o Azure Cosmos DB.
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.