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 .

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 Oct 18, 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.

LINQ V2 removal

LINQ has been on version 3 for a while now, so with the release of 3.0, the driver now supports V3 as standard and V2 has been removed. Previously, before V2.19, you would have to explicitly specify the use of V3 through a MongoClientSettings object.
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, o MongoClient implementa IDisposable, o que significa que a classe e quaisquer classes que implementem a interface IMongoClient têm acesso a um métodoDispose(). A chamada desse método descartará o cluster subjacente e as conexões com o servidor MongoDB .

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
We have also deprecated the MongoDB.Driver.Legacy package in 2.X. This was available in 2.X to ease people migrating from 1.X. However, the continued presence of the 1.X API is leading to more confusion than we would want. In 3.0, this has been removed altogether.

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

Envio e solicitação de dados do MongoDB em um jogo Unity


Sep 09, 2024 | 8 min read
Tutorial

Salvando dados no Unity3D usando o PlayPrefs


Sep 09, 2024 | 11 min read
Artigo

Como configurar mapas de classes do MongoDB para C# para otimizar o desempenho de query e o tamanho de armazenamento


Aug 05, 2024 | 8 min read
exemplo de código

Salvando dados no Unity3D usando SQLite


Sep 07, 2022 | 13 min read
Sumário