Close Menu
Código Simples .NETCódigo Simples .NET
    Facebook X (Twitter) Instagram
    Trending
    • Observabilidade para agentes: por que logs e traces tradicionais já não bastam
    • Context engineering: quando o problema deixa de ser prompt e vira arquitetura
    • Clean Code (2ª edição): o que mudou e o que continua valendo
    • Sunk Cost em Arquitetura de Software: como evitar que meses de investimento virem uma armadilha
    • Guia Profissional de Prompting – Domando um ChatGPT Preguiçoso: Como Obter Respostas Completas, Profundas e Confiáveis
    • A Anatomia de um Prompt: Como Falar com a IA Como um Profissional de Tecnologia
    • Conheça os tipos de registros DNS: o guia completo sobre A, AAAA, NS, CNAME, MX, PTR, SOA, TXT, SRV, SPF e muito mais
    • Cache além do básico: por que LRU e TTL precisam andar juntos
    Facebook X (Twitter) Instagram
    Código Simples .NETCódigo Simples .NET
    Código Simples .NETCódigo Simples .NET
    Home»Asp.net»C#»Transações com MongoDB utilizando .Net

    Transações com MongoDB utilizando .Net

    Jhonathan SoaresBy Jhonathan Soares25 de outubro de 20182 Mins Read C#
    Share
    Facebook Twitter LinkedIn WhatsApp Copy Link
    Antes do MongoDB versão 4.0, o MongoDB era transacionalmente consistente no nível do documento. Essas operações atômicas de documento único fornecem a semântica de transação para atender às necessidades de integridade de dados da maioria dos aplicativos. Isso ocorre porque a flexibilidade do modelo de documento permite que os desenvolvedores incorporem facilmente dados relacionados a uma entidade como matrizes e sub-documentos em um único documento rico. Dito isso, há alguns casos em que a divisão do conteúdo em duas ou mais coleções seria apropriada e, nesses casos, as transações ACID com vários documentos tornam mais fácil do que nunca para os desenvolvedores abordar o espectro completo de casos de uso com o MongoDB. Para uma discussão mais aprofundada sobre o design do modelo de documento do MongoDB, incluindo como representar as relações um-para-muitos e muitos-para-muitos, consulte https://docs.mongodb.com/manual/core/data-model-design/.

    Aplicações C# conectados a um banco de dados MongoDB utilizam o driver do MongoDB .NET. Para adicionar o driver .NET ao seu aplicativo Visual Studio, no NuGet Package Manager, procure por “MongoDB”. Certifique-se de escolher a versão mais recente (> = 2.7) do driver e pressione Instalar.

    Install-Package MongoDB.Driver -Version 2.7.0

     

    No código a seguir, criaremos um objeto Product e executaremos uma transação do MongoDB que inserirá alguns dados de amostra no MongoDB e, em seguida, atualizará os preços de todos os produtos em 10%.

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    using System.Threading.Tasks;
    using MongoDB.Bson;
    using MongoDB.Driver;
    using MongoDB.Bson.Serialization.Attributes;
    
    namespace MongoDBTransaction
    {
        class Program
        {
            public class Product
            {
                [BsonId]
                public ObjectId Id { get; set; }
                [BsonElement("SKU")]
                public int SKU { get; set; }
                [BsonElement("Description")]
                public string Description { get; set; }
                [BsonElement("Price")]
                public Double Price { get; set; }
            }
    
        const string MongoDBConnectionString = "<<YOUR MONGODB CONNECTION STRING>>";
    
        static async Task Main(string[] args)
        {
           if (!await UpdateProducts()) { Environment.Exit(0); }
            Console.WriteLine("Finished updating the product collection");
            Console.ReadKey();
        }
        static async Task<bool> UpdateProducts()
        {
            //Create client connection to our MongoDB database
            var client = new MongoClient(MongoDBConnectionString);
    
            //Create a session object that is used when leveraging transactions
            var session = client.StartSession();
    
            //Create the collection object that represents the "products" collection
            var products = session.Client.GetDatabase("MongoDBStore").GetCollection<Product>("products");
    
            //Clean up the collection if there is data in there
            products.Database.DropCollection("products");
    
            //Create some sample data
        var TV = new Product { Description = "Television", SKU = 4001, Price = 2000 };
        var Book = new Product { Description = "A funny book", SKU = 43221, Price = 19.99 };
        var DogBowl = new Product { Description = "Bowl for Fido", SKU = 123, Price = 40.00 };
    
            //Begin transaction
            session.StartTransaction();
    
            try
            {
                //Insert the sample data 
                await products.InsertOneAsync(TV);
                await products.InsertOneAsync(Book);
                await products.InsertOneAsync(DogBowl);
    
                var filter = new FilterDefinitionBuilder<Product>().Empty;
                var results = await products.Find<Product>(filter).ToListAsync();
                Console.WriteLine("Original Prices:\n");
                foreach (Product d in results)
                {
                    Console.WriteLine(String.Format("Product Name: {0}\tPrice: {1:0.00}", d.Description, d.Price));
                }
    
                //Increase all the prices by 10% for all products
                var update = new UpdateDefinitionBuilder<Product>().Mul<Double>(r=>r.Price,1.1);
                await products.UpdateManyAsync(filter, update); //,options);
    
                //Made it here without error? Let's commit the transaction
                session.CommitTransaction();
    
                //Let's print the new results to the console
                Console.WriteLine("\n\nNew Prices (10% increase):\n");
                results = await products.Find<Product>(filter).ToListAsync();
                foreach (Product d in results)
                {
                    Console.WriteLine(String.Format("Product Name: {0}\tPrice: {1:0.00}", d.Description, d.Price));
                }
            }
            catch (Exception e)
            {
                Console.WriteLine("Error writing to MongoDB: " + e.Message);
                session.AbortTransaction();
          return false;
            }
            return true;
        }
      }

     

    Código Fonte disponível no Github.

    Pontos chave:

    • Você não precisa corresponder propriedades de classe a objetos JSON – basta definir um objeto de classe e inseri-lo diretamente no banco de dados. Não há necessidade de uma camada ORM (Object Relational Mapper).
    • As transações do MongoDB usam o isolamento de instantâneo, o que significa que apenas o cliente envolvido na sessão transacional vê as alterações até o momento em que a transação é confirmada.
    • O MongoDB .NET Driver facilita o aproveitamento de transações e a otimização da sintaxe baseada em LINQ para consultas.

     

    Um grande abraço a todos!

    Fonte: https://www.mongodb.com/blog/

    Share. Facebook Twitter LinkedIn Telegram WhatsApp Copy Link
    Jhonathan Soares
    • Website
    • Facebook
    • X (Twitter)
    • LinkedIn

    Criador do blog Código Simples e com mais 15 anos de experiência em TI, com títulos de MVP Microsoft na área de Visual Studio Development, Neo4j Top 50 Certificate, Scrum Master e MongoDB Evangelist.

    Posts Relacionados

    Cache além do básico: por que LRU e TTL precisam andar juntos

    Arquitetura NoSql 7 de outubro de 20259 Mins Read

    Potencializando o MongoDB com IA: Conheça o MCP Server da MongoDB

    IA NoSql 12 de junho de 20255 Mins Read

    MongoDB Analyzer para .NET: Visualize e otimize suas consultas de forma simples

    NoSql 7 de fevereiro de 20255 Mins Read
    Newsletter

    Digite seu endereço de e-mail para receber notificações de novas publicações por e-mail.

    Junte-se a 25mil outros assinantes
    Posts recentes
    • Observabilidade para agentes: por que logs e traces tradicionais já não bastam
    • Context engineering: quando o problema deixa de ser prompt e vira arquitetura
    • Clean Code (2ª edição): o que mudou e o que continua valendo
    • Sunk Cost em Arquitetura de Software: como evitar que meses de investimento virem uma armadilha
    • Guia Profissional de Prompting – Domando um ChatGPT Preguiçoso: Como Obter Respostas Completas, Profundas e Confiáveis
    Categorias
    • Arquitetura (31)
      • Microsserviços (3)
      • Testes (2)
    • Asp.net (120)
      • C# (89)
      • Mvc (13)
    • Banco de dados (93)
      • NoSql (60)
      • Sql (38)
    • Boas práticas (35)
      • Gestão & Produtividade (5)
      • Metodologias Ágeis (6)
    • Cursos (53)
    • Dicas (108)
    • Front-End (92)
    • IA (8)
    • Linux (6)
    • NodeJS (4)
    • Post do Leitor (9)
    • Python (5)
    • Seo (12)
    • Tecnologia (30)
      • ITIL (1)
      • Padrões de Projeto (4)
    • Testes (2)

    VEJA TAMBÉM

    Cursos
    12 de fevereiro de 20166 Mins Read

    1000 livros gratuitos sobre programação!

    Olha que dica bacana! A pagina só com livros sobre programação é mantida no GitHub…

    30 APIs Gratuitas para desenvolvedores

    Código Simples no Facebook
    Código Simples no Facebook
    • Popular
    • Recente

    1000 livros gratuitos sobre programação!

    12 de fevereiro de 2016

    Google lança versão “invisível” do reCAPTCHA!

    10 de março de 2017

    Mini curso de HTML5 oferecido pela Microsoft

    30 de janeiro de 2014

    O que significa ( !important ) na declaração do CSS ?

    5 de fevereiro de 2014

    Programa para supercompactar arquivos. KGB Archiver.

    6 de fevereiro de 2014

    Observabilidade para agentes: por que logs e traces tradicionais já não bastam

    23 de abril de 2026

    Context engineering: quando o problema deixa de ser prompt e vira arquitetura

    16 de abril de 2026

    Clean Code (2ª edição): o que mudou e o que continua valendo

    12 de fevereiro de 2026

    Sunk Cost em Arquitetura de Software: como evitar que meses de investimento virem uma armadilha

    4 de fevereiro de 2026

    Guia Profissional de Prompting – Domando um ChatGPT Preguiçoso: Como Obter Respostas Completas, Profundas e Confiáveis

    30 de outubro de 2025
    Nosso Feed
    • RSS - Posts
    Fique por dentro

    Digite seu endereço de email para assinar este blog e receber notificações de novas publicações por email.

    Facebook X (Twitter) Instagram LinkedIn

    Type above and press Enter to search. Press Esc to cancel.

    Vá para versão mobile