ASP .NET MVC - CRUD básico com MongoDB
Neste artigo vou mostrar as operações CRUD sendo realizadas com o MongoDB em um projeto ASP .NET MVC usando a linguagem C#. |
Antes de prosseguir sugiro que leia o meu artigo .NET - Apresentando e usando o MongoDB onde eu apresento o MongoDB, um resumo sobre os seus recursos e dou detalhes de instalação e de como iniciar o serviço MongoDB no Windows.
Neste artigo vamos fazer um CRUD básico usando o MongoDB e iremos precisar dos seguintes recursos:
1- Do banco de dados não relacional MongoDB que pode ser obtido neste link: https://www.mongodb.org/downloads
Selecione a versão adequada ao seu sistema operacional. Eu estou trabalhando com a versão 64 bits no Windows 10.
A instalação usando o pacote .msi irá instalar o MongoDB na seguinte pasta :
2- Robomongo um gerenciador visual para o MongoDB que pode ser obtido neste link: http://robomongo.org/ (No nosso exemplo essa ferramenta é opcional)
3- O driver do MongoDB para a plataforma .NET que pode ser obtido neste link: https://github.com/mongodb/mongo-csharp-driver/downloads
No nosso exemplo iremos instalar o drive no nosso projeto usando o Nuget.
Nota: Existe um driver mais atualizado que deve ser instalado se você for usar o Visual Studio 2015.
4- Iniciar o MongoDB
Podemos fazer isso manualmente ou iniciar como um serviço do Windows. (veja no meu artigo como fazer isso)
Vamos iniciar manualmente.
Para isso vamos criar uma pasta chamada db_MongoDB na raiz do drive C: . (Nome pode ser qualquer um)
Abra um prompt de comando no seu Windows e posicione-se na raiz do drive C: e a seguir digite o comando : md db_MongoDB
A seguir posicione-se na pasta onde o MongoDB foi instalado :
E digite o seguinte comando para iniciar o serviço manualmente : mongod.exe --dbpath c:\db_MongoDB
Pronto ! temos um serviço MongoDB atendendo na porta 27017. (Não feche a janela pois precisaremos do serviço para acessar o MongoDB)
Criando o projeto Web no Visual Studio Community 2013
Abra o VS Community 2013 e clique em New Project;
Selecione a linguagem C# -> Web e o template ASP .NET Web Application e informe o nome Mvc_MongoDB;
A seguir selecione o template Empty e marque MVC clicando a seguir no botão OK;
Assim nosso projeto web será criado com a seguinte estrutura visualizada na janela Solution Explorer:
Instalando o driver MongoDB para a plataforma .NET
No menu Tools clique em Nuget Package Manager e a seguir em Manage Nuget Packages for Solution;
Digite Mongo na caixa de busca e a seguir selecione o pacote Official C# Driver for MongoDB , marque o projeto onde deseja instalar e clique no botão Install;
Nota: Se você usar o VS Community 2015 deverá instalar o driver atualizado : MongoDB.Driver.
Vamos definir no arquivo web.config a string de conexão conforme o código abaixo:
.. <connectionStrings> <add name="conexaoMongoDB" connectionString="mongodb://localhost:27017"/> </connectionStrings> .. |
Definindo o Model
Agora vamos criar o nosso domínio definindo na pasta Models as classes Pais e PaisDB.
Clique com o botão direito do mouse sobre a pasta Models e a seguir clique em Add Class e informe o nome Pais.cs.
A seguir digite o código abaixo nesta classe:
using MongoDB.Bson; using MongoDB.Bson.Serialization.Attributes; using System; using System.ComponentModel.DataAnnotations;
namespace Mvc_MongoDB.Models [Required] [Required] [Required] |
Definimos a classe Pais com 4 propriedades : Id , PaisCodigo,PaisNome PaisPopulacao
Usando o Data Annotations usamos atributos para validar e atribuir os tipos das propriedades.
A propriedade Id é chamado ObjectId com o tipo de dados string com um atributo [BsonRepresentation(BsonType.ObjectId)]
O tipo ObjectId é o tipo mais comum usado para isso. O atributo Id deve ser único para cada documento em uma coleção.
O ObjectId é um valor binário de 12 bytes que consiste de:
O Driver C# tem um pool de conexão para usar conexões para o servidor de forma eficiente. Não há necessidade de Conectar e Desconectar, basta deixar o Driver cuidar das conexões.
Repita o procedimento acima e agora creia a classe PaisDB com código a seguir:
using MongoDB.Driver; using System; using System.Configuration; namespace Mvc_MongoDB.Models
public PaisDB () conexaoMongoDB = ConfigurationManager.ConnectionStrings["conexaoMongoDB"].ConnectionString; Database = server.GetDatabase(DataBaseName); public MongoCollection<Pais> Paises |
Nesta classe obtemos a string de conexão como MongoDB definida no arquivo web.Config e obtemos o nome do banco de dados (documento) (PaisDB).
Fazendo um paralelo com o modelo relacional e o MongoDB temos que entender alguns conceitos importantes:
Então podemos montar a seguinte tabela de equivalência entre o MongoDB e os RDBMS:
Banco de Dados Relacional | MongoDB |
Table | Collection |
Row | Document |
Column | Field |
Join | Embedding |
Schema | - |
Dessa forma o método Paises retorna a coleção de países da tabela Pais no MongoDB.
Criando o controlador HomeController
Vamos agora criar o controlador na pasta Controllers.
Clique com o botão direito do mouse sobre a pasta Controllers e a seguir em Add Controller;
Selecione o Scaffold MVC5 Controller Empty;
Informe o nome HomeController e a seguir informe o código abaixo neste controlador:
using System.Web.Mvc; using Mvc_MongoDB.Models; using MongoDB.Bson; using MongoDB.Driver.Builders; namespace Mvc_MongoDB.Controllers { public class HomeController : Controller { private readonly PaisDB Context = new PaisDB(); public ActionResult Index() { var Paises = Context.Paises.FindAll().SetSortOrder(SortBy<Pais>.Ascending(r => r.PaisCodigo)); return View(Paises); } public ActionResult Create() { return View(); } [HttpPost] public ActionResult Create(Pais _pais) { if (ModelState.IsValid) { Context.Paises.Insert(_pais); return RedirectToAction("Index"); } return View(); } public ActionResult Edit(string Id) { var pais = Context.Paises.FindOneById(new ObjectId(Id)); return View(pais); } [HttpPost] public ActionResult Edit(Pais _pais) { if (ModelState.IsValid) { Context.Paises.Save(_pais); return RedirectToAction("Index"); } return View(); } [HttpGet] public ActionResult Delete(string Id) { var del = Context.Paises.FindOneById(new ObjectId(Id)); return View(del); } [HttpPost, ActionName("Delete")] public ActionResult DeleteConfirmed(string Id) { var del = Context.Paises.Remove(Query.EQ("_id", new ObjectId(Id))); return RedirectToAction("Index"); } } } |
A classe acima define os seguintes métodos Action:
Neste código estamos usando a classe de domínio chamada PaisDB e teremos uma referência a uma coleção contendo documentos da entidade Pais.
A seguir criamos uma instância da classe PaisDB e usamos o objeto Context para acessar os métodos do MongoDB.
Os métodos MongoDB usados foram:
Método | Descrição |
FindAll | Retorna todos os registros |
SetSortOrder | Consulta em ordem de classificação |
Insert | Adiciona um novo registro |
FindOneById | Encontra um registro com base no ObjectId |
Save | Atualiza o registro |
Remove | Remove um registro |
Criando as Views do projeto
Agora falta criar as respectivas views para cada método Action. O procedimento usado será o mesmo para cada método Action alterando-se apenas o nome da view e o template usado.
1- Criando a View Index
2- Criando a View Create
3- Criando a View Edit
4- Criando a View Delete
Eu não vou colocar o código das views pois ele é gerado pelo Scaffold e a única alteração que foi feita foi a tradução dos textos para o português. Alteramos também o texto do arquivo _Layout.cshtml da pasta Shared.
Executando o projeto e incluindo alguns países iremos obter o seguinte resultado:
Verificando os dados com RoboMongo
Após isso poderemos verificar os dados no MongoDB usando a ferramenta RoboMongo.
Abrindo o RoboMongo veremos uma janela que exibe as conexões criadas com opção para Criar, Editar e Remover conexões :
Para criar uma conexão clique no link create e informe o nome e o endereço e porta da conexão, salvando-a em seguida:
Para o nosso exemplo , vemos abaixo o nosso banco de dados aberto e os dados que foram inseridos exibidos :
O MongoDB é uma alternativa aos bancos de dados relacionais e dependendo do cenário pode ser uma opção válida de armazenamento e gerenciamento de informações e que responde muito rápido a consultas.
Pegue o projeto completo aqui : Mvc_MongoDB.zip
Porque o amor ao dinheiro é a raiz de toda a espécie de males; e nessa cobiça
alguns se desviaram da fé, e se traspassaram a si mesmos com muitas dores.
1 Timóteo 6:10
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 ? Quer aprender a criar aplicações Web Dinâmicas usando a ASP .NET MVC 5 ? |
Gostou ? Compartilhe no Facebook Compartilhe no Twitter
Referências: