Close Menu
Código Simples .NETCódigo Simples .NET
    Facebook X (Twitter) Instagram
    Trending
    • NewSQL em 2025: O Estado Atual, Tendências e o Futuro dos Bancos de Dados Relacionais Escaláveis
    • 12 Regras Essenciais para Reduzir a Latência de Aplicações
    • Cache Hit Ratio: Como uma Simples Métrica Pode Revolucionar sua Arquitetura
    • Como a Uber calcula o tempo estimado de chegada
    • 30 APIs Gratuitas para desenvolvedores
    • Por que escalar escrita é tão mais difícil do que escalar leitura?
    • MongoDB Analyzer para .NET: Visualize e otimize suas consultas de forma simples
    • Cardinalidade: O Conceito que Transforma o Desempenho de Bancos de Dados SQL e NoSQL
    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

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

    NoSql 7 de fevereiro de 20255 Mins Read

    Cardinalidade: O Conceito que Transforma o Desempenho de Bancos de Dados SQL e NoSQL

    NoSql Sql 14 de janeiro de 20257 Mins Read

    O que é a Ecma e qual é sua relação com C#?

    C# Post do Leitor 29 de julho de 20247 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
    • NewSQL em 2025: O Estado Atual, Tendências e o Futuro dos Bancos de Dados Relacionais Escaláveis
    • 12 Regras Essenciais para Reduzir a Latência de Aplicações
    • Cache Hit Ratio: Como uma Simples Métrica Pode Revolucionar sua Arquitetura
    • Como a Uber calcula o tempo estimado de chegada
    • 30 APIs Gratuitas para desenvolvedores
    Categorias
    • Arquitetura (14)
      • Testes (2)
    • Asp.net (120)
      • C# (89)
      • Mvc (13)
    • Banco de dados (90)
      • NoSql (58)
      • Sql (38)
    • Boas práticas (29)
      • Gestão & Produtividade (1)
      • Metodologias Ágeis (6)
    • Cursos (52)
    • Dicas (105)
    • Front-End (92)
    • IA (1)
    • 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

    Facebook X (Twitter) Instagram LinkedIn

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

    Vá para versão mobile