Explore o novo chatbot do Developer Center! O MongoDB AI chatbot pode ser acessado na parte superior da sua navegação para responder a todas as suas perguntas sobre o MongoDB .

Junte-se a nós no Amazon Web Services re:Invent 2024! Saiba como usar o MongoDB para casos de uso de AI .
Desenvolvedor do MongoDB
Central de desenvolvedor do MongoDBchevron-right
Idiomaschevron-right
C#chevron-right

A versão 3.0 do driver C# está aqui! O que você precisa saber?

Luce Carter5 min read • Published Oct 18, 2024 • Updated Nov 04, 2024
.NETC#
Ícone do FacebookÍcone do Twitterícone do linkedin
Avalie esse Artigo
star-empty
star-empty
star-empty
star-empty
star-empty
Temos boas notícias! Pela primeira vez em oito anos, o driverC# do MongoDB teve uma atualização de versão principal. Então, para festejar o lançamento de 3.0, vamos dar uma olhada em algumas das coisas que você precisa saber e alguns exemplos de recursos e alterações interessantes.
Você pode visualizar o guia de atualização em nossa documentação para ver como mudar de 2.X para 3.0. Também temos uma seção na documentação sobre as novidades do 3.0.

É bom saber

A equipe do C# Driver destinou muito tempo e cuidado a esta versão e ela resolve muitos problemas de tecnologia e recursos técnicos. Abaixo está uma lista de algumas coisas que é bom saber sobre esta versão.

Fusão de alta e principal

Como desenvolvedor que usa o driver, você pode nem saber disso, mas a partir de uma versão menor anterior do driver, ele foi divisão em duas camadas conhecidas como "high " e "core. " Alto é essencialmente um cliente do núcleo e o que está atualmente exposto aos usuários. No entanto, desde então ficou claro que o núcleo não precisa ser público, então eles foram incorporados em uma única assembléia. Isso tudo faz parte da divida técnica que a equipe queria resolver para 3.0.

Remoção do LINQ V2

O LINQ está na versão 3 há algum tempo, portanto, com o lançamento do 3.0, o driver agora suporta V3 como padrão e o V2 foi removido. Anteriormente, antes de V2.19, você teria que especificar explicitamente o uso de V3 por meio de um objetoMongoClientSettings .
Agora, você não precisa usar isso e, em vez disso, obterá os benefícios de V3 sem precisar especificá-lo.

O GridFS agora está incluído no driver

Se você tiver cenários em que está armazenando arquivos que excedem o limite de documento 16MB, talvez tenha se encontrado usando o pacote GridFS . Anteriormente, esta era uma biblioteca separada, mas agora está disponível imediatamente com 3.0!

Alterações de GUID

O MongoDB suporta GUID como um tipo de dados e, em muitas coleções do MongoDB , os campos GUID em um documento usam o mesmo tipo sob o capô, BsonBinaryData. Na documentação , ele explica os diferentes valores de propriedade que lidam com os diferentes subtipos de GUID que podem ser encontrados em coleções mais antigas.
Em resumo, o V2 pressupõe que todos os GUIDs usem o mesmo subtipo de BsonBinaryData. Este é o padrão no driver C# 2.X. Em V3, campos no mesmo documento podem usar diferentes formatos GUID e a representação é configurada no nível da propriedade usando o serializador.
A partir da versão do driver 3.0 , a V3 se tornará o padrão, e a compatibilidade com a V2 será removida.
Também há alterações no comportamento padrão do serializador GUID, que agora lidará com GUIDs por padrão como GuidReprensentation.Unspecified. Isso é para encorajar a ser explícito sobre o tipoGuidRepresentation que está sendo usado.

MongoClient descartável

Atualmente, o Conselho de práticas recomendadas para o uso de MongoClient é fornecer a ele um escopo de vida útil único. No entanto, foram observados alguns problemas que exigem o escopo por instância, pois o escopo da vida útil está causando uso excessivo de memória e recursos não descartados.
Agora, foi introduzido um recurso experimental em que um novo MongoClient implementa IDisposable, o que significa que a classe e quaisquer classes que implementem a interface IMongoClient têm acesso a um métodoDispose(). Uma vez descartadas, qualquer conexão de membro resultará em um ObjectDisposedException
No entanto, chamar Dispose não descartará o cluster e as conexões subjacentes; para isso, você ainda precisará chamar ClusterRegistry.UnregisterAndDisposeCluster().

Melhorias de data e hora

Esta nova versão do 3.0 traz muitas melhorias para coisas relacionadas a data e hora. Não se preocupar, não vamos entrar em um debate sobre fusos horários!

DateOnly e TimeOnly

O primeiro são as questões relacionadas à inclusão ou exclusão de data ou hora. No .NET 6 (lançado em 2021), dois novos tipos foram introduzidos chamados DateOnly e TimeOnly, que removem a necessidade de uma hora ou data, dependendo do tipo. Isso significa que não precisamos criar um horário como antes - por exemplo, quando era apenas a data que importava.
3.0 agora suporta estes tipos em suas classes de modelo!

DateTimeOffset

Desde o início, o driver já serializou DateTimeOffset como arrays BSON. Isso agora mudou de modo que o comportamento padrão é que, sob o capô, eles sejam serializados como documentos BSON.
Se quiser retornar ao comportamento anterior, você pode adicionar o atributo[BsonRepresentation(BsonType.Array)] à propriedade em seu modelo.

Atualizações para decimais

Anteriormente, decimal e decimal128 foram serializados como valores de string BSON. Isso consistia em ter que fazer algum código extra manual para tratá-lo como um decimal em seu código. Em 3.0, isso foi alterado para que, por padrão, seja armazenado como Decimal128 valores.
No entanto, há uma opção de continuar usando a string, se você preferir. Basta adicionar o atributo [BsonRepresentation(BsonType.String)] à sua propriedade.

API BulkWrite

Também houve alterações na API BulkWrite como parte da versão 3.0. Elas têm como objetivo melhorar a experiência do desenvolvedor, mudando a forma como ela funciona e como pode ser aplicada.
Os desenvolvedores BulkWrite()executar essasBulkWriteAsync()em uma coleção de cada vez. Além disso, isso só poderia ser feito para um único tipo de gravação, como um lote de inserções, exclusões etc. Você ainda poderia fornecer uma mistura de tipos para a chamada, mas sob o capot o driver os separaria, levando a vários chamadas de banco de dados de dados que não são as mais eficientes, pois isso leva a várias chamadas de ida e volta. Isso significa que as chamadas BulkWrite demoram muito mais tempo.
Isso foi alterado a partir de 3.0. Agora você pode executar várias operações de gravação, como atualização ou exclusão, com uma única chamada de banco de dados de dados por meio da API BulkWrite.
Agora você usa uma classeBulkWriteModelque vem na forma de:
  • BulkWriteInsertOneModel<TDocument>
  • BulkWriteUpdateOneModel<TDocument>
  • BulkWriteUpdateManyModel<TDocument>
  • BulkWriteReplaceOneModel<TDocument>
  • BulkWriteDeleteOneModel<TDocument>
  • BulkWriteDeleteManyModel<TDocument>
Você também pode substituir TDocument por sua classe de modelo POCO. Não deixe de acessar a documentação do BulkWrite para ver mais informações e amostras de código relacionadas a essa alteração.

Refatoração do pacote NuGet

Já faz algum tempo que aceitamos a criptografia no nível do campo do lado do cliente (CSFLE), que adiciona uma camada extra de segurança ao criptografar seus dados antes de serem enviados pela rede para o MongoDB.
Isso foi feito usando a bibliotecaMongoDB.LibMongocrypt. No entanto, em 3.0, isso foi ligeiramente alterado. A funcionalidade básica do CSFLE agora pode ser encontrada no MongoDB.Driver.Encryption.
Também houve uma alteração com o pacote de autenticação Amazon Web Services , que agora tem seu próprio pacote. Isso significa que, se você não quiser a funcionalidade de autenticação do Amazon Web Services , não terá mais esse excesso de código oculto em seu aplicativo publicado.
Na verdade, essa refatoração e movimentação em pacotes diferentes levou a algumas estatísticas interessantes para quem curte dados:
  • Em um aplicação CRUD simples, o tamanho da pasta publicada passou de 38MB para 4MB!
  • Foram removidas cerca de 32% das APIs públicas
  • A solução tem seis projetos a menos, com 16 em vez de 22
  • Reduziu de 663K linhas de código para 555K- uma redução enorme de 16%!
  • Removido sobre 200 .cs .idl
Também descontinuamos o pacoteMongoDB.Driver.Legacy em 2.X. Isso estava disponível em 2.X para facilitar as pessoas que migram de 1.X. No entanto, a presença contínua da API 1.X está causando mais confusão do que desejamos. Em 3.0, isso foi completamente removido.

Resumo

Que legal! Após oito anos, temos uma versão principal do driver C#!
Este artigo foi apenas uma prévia de algumas mudanças e coisas que você deve saber. É claro que o melhor lugar para ver todas as novidades é em nossa documentação.
Boas 3.0!
Principais comentários nos fóruns
Ainda não há comentários sobre este artigo.
Iniciar a conversa

Ícone do FacebookÍcone do Twitterícone do linkedin
Avalie esse Artigo
star-empty
star-empty
star-empty
star-empty
star-empty
Relacionado
Tutorial

Manipulação de aggregation pipelines complexas com c# C#


Nov 15, 2024 | 5 min read
Início rápido

Crie seu primeiro aplicativo .NET Core com o MongoDB Atlas


Jun 04, 2024 | 6 min read
Tutorial

Adicionando o MongoDB Atlas Vector Search a um aplicativo .NET Blazor C#


Feb 29, 2024 | 10 min read
Tutorial

Salvando dados no Unity3D usando o PlayPrefs


Sep 09, 2024 | 11 min read
Sumário