ASP .NET Core - Usando o MongoDB - I


Neste artigo vou mostrar como podemos usar o banco de dados MongoDB em uma aplicação ASP .NET Core 2.0.

Se você não conhece o MongoDB saiba que ele é um banco de dados NoSQL baseado em documentos (JSON) que você pode baixar neste link:  http://mongodb.org.

O MongoDB é muito poderoso e fácil de começar a usar. Vejamos alguns conceitos básicos sobre ele:

  1. Um documento é a unidade básica de dados para o MongoDB, equivalente a uma linha de um sistema de gerenciamento de banco de dados relacional (mas muito mais expressiva).

  2. Uma coleção pode ser vista como o equivalente a um esquema de uma tabela;

  3. Uma única instância do MongoDB pode hospedar vários bancos de dados independentes, cada um que pode ter suas próprias coleções e permissões.

  4. MongoDB vem com shell JavaScrip simples e poderoso que é útil para a administração de instâncias MongoDB e manipulação de dados.

  5. Cada documento tem uma chave especial, "_id", que é única em todo o documento da coleção.

Eu já publiquei artigos sobre como usar o MongoDb na plataforma .NET e por isso não vou entrar em mais detalhes neste artigo. Se este é seu primeiro contato com o MongoDb é bom você ler os artigos abaixo antes de prosseguir:

Este artigo vai focar na utilização do MongoDb em uma aplicação ASP .NET Core 2.0 onde vamos realizar um CRUD básico em um documento chamado NotasDb onde iremos gerenciar informações para anotações definindo os seguintes atributos na coleção : Id, Titulo, Conteudo e Acessos.

Antes de prosseguir você tem que instalar o MongoDB em seu ambiente. ( https://docs.mongodb.com/getting-started/shell/installation/ )

Recursos Usados:

Criando um projeto ASP .NET Core

Abra o VS 2017 Community e crie um novo projeto selecionando o template Web -> ASP .NET Web Application e informe o nome AnotacoesAPI;

A seguir selecione o template Web Application(Model-View-Controller) , ASP .NET Core 2.0, sem autenticação e clique no botão OK;

Temos assim nosso projeto criado e pronto para ser usado.

Incluindo a referência ao driver MongoDB.Driver no projeto

Para poder trabalhar com o MongoDB na plataforma .NET devemos instalar MongoDB.Driver em nosso projeto.

No menu Tools clique em Nuget Package Manager e a seguir clique em Manage Nuget Packages for Solution;

Clique em Browse e informe o nome Mongodb e selecione a opção MongoDB.Driver e clique no botão Install;

Criando a classe de contexto e a classe de domínio

Vamos agora criar na pasta Models a classe Nota que vai representar a nossa 'tabela' que no MongoDB é definida por uma coleção.

Nesta classe vamos definir os campos : Id, Titulo, Conteudo e Acessos que representam os campos da nossa tabela.

Abaixo temos o código da classe Nota:

using System;
using System.ComponentModel.DataAnnotations;
namespace AnotacoesAPI.Models
{
    public class Nota
    {
        public Guid Id { get; set; }
        [Required]
        public string Titulo { get; set; }
        [Required]
        public string Conteudo { get; set; }
        [Required]
        public int Acessos { get; set; }
    }
}

A seguir vamos criar a classe MongoDbContext que vai representar o nosso contexto onde vamos definir as propriedades:

No construtor da classe definir as propriedades que iremos usar no arquivo de configuração da aplicação.

using MongoDB.Driver;
using System;

namespace AnotacoesAPI.Models
{
    public class MongoDbContext
    {
        public static string ConnectionString { get; set; }
        public static string DatabaseName { get; set; }
        public static bool IsSSL { get; set; }

        private IMongoDatabase _database { get; }

        public MongoDbContext()
        {
            try
            {
                MongoClientSettings settings = MongoClientSettings.FromUrl(new MongoUrl(ConnectionString));
                if (IsSSL)
                {
                    settings.SslSettings = new SslSettings { EnabledSslProtocols = System.Security.Authentication.SslProtocols.Tls12 };
                }
                var mongoClient = new MongoClient(settings);
                _database = mongoClient.GetDatabase(DatabaseName);
            }
            catch (Exception ex)
            {
                throw new Exception("Não foi possível se conectar com o servidor.", ex);
            }
        }

        public IMongoCollection<Nota> Notas
        {
            get
            {
                return _database.GetCollection<Nota>("Notas");
            }
        }
    }
}

O comando usado para gerar o modelo de entidades a partir do banco de dados é  o mesmo que o usado para o SQL Server.

Configurando a string de conexão e o nome do banco de dados

Vamos definir no arquivo appsettings.json da aplicação a string de conexão usada em nosso projeto e o nome do documento que representa o banco de dados:

{
  "MongoConnection": {
    "ConnectionString": "mongodb://localhost:27017",
    "Database": "NotasDb",
    "IsSSL": true
  },
  "Logging": {
    "IncludeScopes": false,
    "LogLevel": {
      "Default": "Warning"
    }
  }
}

Agora podemos definir no arquivo Startup.cs,  no método Configure, a obtenção dos valores da string de conexão e do nome do banco de dados usado na aplicação:

  public void ConfigureServices(IServiceCollection services)
  {
    MongoDbContext.ConnectionString = Configuration.GetSection("MongoConnection:ConnectionString").Value;
    MongoDbContext.DatabaseName = Configuration.GetSection("MongoConnection:Database").Value;
   MongoDbContext.IsSSL = Convert.ToBoolean(this.Configuration.GetSection("MongoConnection:IsSSL").Value)
;

       services.AddMvc();
 }

Criando o controlador NotasController

Podemos agora criar o controlador NotasController onde vamos definir os métodos para acessar, incluir, editar e deletar informações do documento MongoDb.

Clique com o botão direito do mouse sobre a pasta Controllers e a seguir clique em Add-> Controller;

Selecione o template MVC Controller - Empty e clique em Add;

Informe o nome NotasController e clique no botão Add;

A seguir inclua o código abaixo no controller NotasController:

using AnotacoesAPI.Models;
using Microsoft.AspNetCore.Mvc;
using MongoDB.Driver;
using System;
using System.Collections.Generic;
using System.Linq;
namespace AnotacoesAPI.Controllers
{
    public class NotasController : Controller
    {
        public IActionResult Index()
        {
            MongoDbContext dbContext = new MongoDbContext();
            List<Nota> listaNotas = dbContext.Notas.Find(m => true).ToList();
            return View(listaNotas);
        }
        [HttpGet]
        public IActionResult Edit(Guid id)
        {
            MongoDbContext dbContext = new MongoDbContext();
            var entity = dbContext.Notas.Find(m => m.Id == id).FirstOrDefault();
            return View(entity);
        }
        [HttpPost]
        public IActionResult Edit(Nota entity)
        {
            MongoDbContext dbContext = new MongoDbContext();
            dbContext.Notas.ReplaceOne(m => m.Id == entity.Id, entity);
            return View(entity);
        }
        [HttpGet]
        public IActionResult Add()
        {
            return View();
        }
        [HttpPost]
        public IActionResult Add(Nota entity)
        {
            MongoDbContext dbContext = new MongoDbContext();
            entity.Id = Guid.NewGuid();
            dbContext.Notas.InsertOne(entity);
            return RedirectToAction("Index", "Notas");
        }
        [HttpGet]
        public IActionResult Delete(Guid id)
        {
            MongoDbContext dbContext = new MongoDbContext();
            dbContext.Notas.DeleteOne(m => m.Id == id);
            return RedirectToAction("Index", "Notas");
        }
    }
}

Definimos os seguintes métodos Action :

Nota:  Podemos melhorar o código acima criando uma única instância do contexto :  MongoDbContext e evitar a repetição de código.

Na próxima parte do artigo iremos criar as Views para cada método Action em nossa aplicação.

"Disse-lhe Jesus: Eu sou o caminho, e a verdade e a vida; ninguém vem ao Pai, senão por mim"
João 14:6

Veja os Destaques e novidades do SUPER DVD Visual Basic (sempre atualizado) : clique e confira !

Quer migrar para o VB .NET ?

Quer aprender C# ??

Quer aprender os conceitos da Programação Orientada a objetos ?

Quer aprender o gerar relatórios com o ReportViewer no VS 2013 ?

Referências:


José Carlos Macoratti