Conhecendo e usando o LiteDb
O LiteDb é um banco de dados NoSql desenvolvido e mantido pelo Mauricio David. Você pode conhecer mais sobre acessando a página do projeto. Mas o que o LiteDb tem de diferença que os outros banco de dados NoSql não tem?
- Não necessita de um servidor de documentos NoSql
- Possui uma API simples muito semelhante ao do MongoDb
- Pequena biblioteca desenvolvida 100% em código C# NET 3.5 / NETStandard 1.4
- Suporte para Portable UWP/PCL
- Recuperação de dados após falha de gravação
- Criptografia de arquivo de dados usando criptografia DES (AES)
- Transações ACID (atomicidade, consistência, isolamento e durabilidade)
- Recuperação de dados após falha de gravação (journal mode)
- Mapeie suas classes POCO para o BsonDocument usando atributos ou usando Fluent Mapper API
- Armazenar arquivos e dados de fluxo (como GridFS no MongoDB)
- Armazenamento de arquivos de dados simples (como SQLite)
- Indexação de campos dos documentos para pesquisa rápida (até 16 índices por coleção)
- Suporte a consultas LINQ
- Shell de comando
- Código-fonte aberto e gratuito, inclusive para uso comercial
- Pode ser instalado via NuGet
Para demonstrar o uso do LiteDb, vamos criar uma aplicação de cadastro simples, realizando as operações básicas como Consulta, Inclusão, Exclusão e Atualização. Iniciaremos criando um novo projeto, pra isso utilizarei o Visual Studio Community 2015. Abra-o e crie um novo projeto usando o template Windows Form Application. No Form1 desse novo projeto adicionaremos 4 Button e 1 DataGridView.
Com o nosso form criado, vamos adicionar a referencia do LiteDb usando o NuGet Package Manager. Pesquise por LiteDb e adicione ao projeto.
Vamos agora criar o objeto necessário para o nosso projeto. Usaremos o objeto com o nome de Agenda e definiremos para ele qual a coluna é um Id e quais as colunas deverão ser indexadas.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
using LiteDB;
public class Agenda
{
[BsonId]
public int Id { get; set; }
[BsonIndex]
public string Nome { get; set; }
[BsonIndex]
public string Email { get; set; }
public string Telefone { get; set; }
}
Adicione um novo form e inclua nele 3 Label, 3 TextBox e 2 Button. Agora vamos implementar o código responsavel em gravar os dados. Dê um duplo clique no button1 do Form2, esse botão será responsavel por incluir os dados.
1
2
3
4
5
6
7
8
9
10
11
12
13
private void button1_Click(object sender, EventArgs e)
{
var agenda = new Agenda();
agenda.Nome = textBox1.Text;
agenda.Email = textBox2.Text;
agenda.Telefone = textBox3.Text;
using (var db = new LiteDatabase("Filename=criandoUsandoLiteDb.db"))
{
db.GetCollection<Agenda>().Insert(agenda);
}
this.Close();
}
Repare no código anterior que para salvar simplesmente criamos uma instancia do objeto agenda, atribuimos os valores para ele e salvamos. Para testar precisamos criar um evento no botão incluir do form1.
1
2
3
4
5
private void button2_Click(object sender, EventArgs e)
{
var form2 = new Form2();
form2.ShowDialog();
}
Ao executar nosso projeto, já podemos incluir registro no LiteDb. E podemos confir se os dados estão lá usando o LiteDb Shell (falarei sobre ele mais para frente).
Agora em nosso form1 vamos implementar o botão que irá listar todos os dados no DataGridView.
1
2
3
4
5
6
7
8
9
10
private void button1_Click(object sender, EventArgs e)
{
using (var db = new LiteDatabase("Filename=criandoUsandoLiteDb.db"))
{
var agendas = db.GetCollection<Agenda>().FindAll().ToList();
dataGridView1.SelectionMode = DataGridViewSelectionMode.FullRowSelect;
dataGridView1.DataSource = agendas;
}
}
Para realizar a atualização, vamos criar um novo form, o form3 e adicionar 4 Label, 4 TextBox e 2 Button;
Precisaremos também fazer uma pequena mudança no form3 para que ele receba o id do registro para ser consultado e posteriormente editado. Alteraremos o construtor para receber o Id e carregar os dados para o formulário.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
protected readonly int Id;
protected Agenda agenda;
public Form3(int id)
{
this.Id = id;
InitializeComponent();
CarregaDados();
}
private void CarregaDados()
{
using (var db = new LiteDatabase("Filename=criandoUsandoLiteDb.db"))
{
agenda = db.GetCollection<Agenda>().FindById(this.Id);
}
textBox1.Text = agenda.Id.ToString();
textBox2.Text = agenda.Nome;
textBox3.Text = agenda.Email;
textBox4.Text = agenda.Telefone;
}
Agora criaremos o evento para salvar os dados.
1
2
3
4
5
6
7
8
9
10
11
12
13
private void button1_Click(object sender, EventArgs e)
{
agenda.Nome = textBox2.Text;
agenda.Email = textBox3.Text;
agenda.Telefone = textBox4.Text;
using (var db = new LiteDatabase("Filename=criandoUsandoLiteDb.db"))
{
db.GetCollection<Agenda>().Update(agenda);
}
this.Close();
}
Voltando ao form1, vamos definir o evento do botão atualizar.
1
2
3
4
5
6
7
8
private void button3_Click(object sender, EventArgs e)
{
int id;
int.TryParse(dataGridView1.SelectedRows[0].Cells[0].Value.ToString(), out id);
var form3 = new Form3(id);
form3.ShowDialog();
}
Para concluir, iremos definir a opção de excluir. Vamos definir o evento do button4.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
private void button4_Click(object sender, EventArgs e)
{
int id;
int.TryParse(dataGridView1.SelectedRows[0].Cells[0].Value.ToString(), out id);
if (id > 0)
{
var dialogResult = MessageBox.Show("Deseja excluir o registro selecionado?", "Excluir", MessageBoxButtons.YesNo, MessageBoxIcon.Question, MessageBoxDefaultButton.Button2);
if (dialogResult == DialogResult.Yes)
{
using (var db = new LiteDatabase("Filename=criandoUsandoLiteDb.db"))
{
db.GetCollection<Agenda>().Delete(id);
}
}
}
}
Como pode perceber, em nenhum momento foi preciso abrir qualquer tipo de gerenciador de banco de dados, tão pouco executar comandos SQL. Porem é possível criar as consultas utilizando expressão Linq ou o próprio Helper do LiteDb.
1
db.GetCollection().Find(x => x.Nome.Contains("Pedro")).ToList(); db.GetCollection().Find(Query.Contains("Nome", "Pedro"));
Outro ponto interessante que pode perceber que somente definimos um nome para o banco de dados e ele foi criado junto com o nosso executável. É possível gerenciar o banco criado, basta utilizar o LiteDb Shell que você irá encontrar aqui e consultar seu uso aqui.
Como pode perceber o LiteDb pode nos atender muito bem para pequenos e médios projetos, tanto para aplicações Windows, Web ou Mobile (esse ainda não vi funcionar mas a proposta parece muito boa). Não deixe de acompanhar o projeto no GitHub e qualquer dúvida pode deixar seu comentário.
Abraço e bom estudo!