Júnior Oliveira

C Sharp; Delphi; ASP .NET; PHP; Javascript;

Simple.Data

28 Sep 2015 csharp, simpledata

Olá pessoal, hoje eu vou falar um pouco sobre Simple.Data.

O que é?

Simple.Data é um micro framework de acesso a banco de dados baseado no ActiveRecord e DataMapper do Ruby.
Ele usa dynamic do .NET 4 para interpretar nomes de método e propriedade em tempo de execução e mapeá-los usando uma abordagem baseada em convenções.

Como instalar?

Você pode instalar via NuGet, segue a lista dos pacotes oficiais do Simple.Data.
Se você vai usar no SQL Server por exemplo, você pode executar o comando abaixo no Package Manager Console do Visual Studio.

Install-Package Simple.Data.SqlServer

Qual problema resolve?

Não precisa de muitas linhas de códigos para acessar o banco de dados.
Não precisa se preocupar com SQL injection.
É uma forma fluente de escrever as operação que serão feitas no banco de dados.
Diferente dos ORM's como NHibernate, não precisa configurar o mapeamento de tabela para classe.

Alguns exemplos

Insert, existem várias formas de inserir um dado usando Simple.Data, abaixo apenas uma das possíveis formas, este exemplo completo está no GitHub.

 1 var db = Database.OpenNamedConnection("db");
 2 
 3 var account = new Account
 4 {
 5     Name = "Junior",
 6     Email = "junior@email.com",
 7     Password = "123456"
 8 };
 9 
10 db.Accounts.Insert(account);

Update, existem várias formas de atualizar um dado usando Simple.Data, abaixo apenas uma das possíveis formas, este exemplo completo está no GitHub.

1 var db = Database.OpenNamedConnection("db");
2 
3 Account account = db.Accounts.Get(id);
4 
5 account.Name = "Junior Oliveira";
6 
7 db.Accounts.Update(account);

Delete, existem várias formas de deletar um dado usando Simple.Data, abaixo apenas uma das possíveis formas.

1 var db = Database.OpenNamedConnection("db");
2 
3 db.Accounts.DeleteById(id);

Abaixo alguns exemplos mais complexos do que se consegue fazer com Simple.Data.
Exemplo usando All, Select, Where, Skip, Take e OrderBy, este exemplo completo está no GitHub.

 1 var db = Database.OpenNamedConnection("db");
 2 
 3 List<Account> model = db.Accounts.All()
 4                                  .Select(
 5                                      db.Accounts.Id,
 6                                      db.Accounts.Name,
 7                                      db.Accounts.Email)
 8                                  .Skip(_skip.Apply(filter))
 9                                  .Take(_limit.Apply(filter))
10                                  .OrderBy(
11                                      db.Accounts.Name);

Outro exemplo usando Join ~ On, As, e FirstOrDefault, este exemplo completo está no GitHub.

 1 dynamic accounts;
 2 
 3 var data = db.Urls.All()
 4                   .Join(db.Accounts, out accounts)
 5                       .On(db.Urls.AccountId == accounts.Id)
 6                   .Select(
 7                       db.Urls.Id,
 8                       db.Urls.Address,
 9                       accounts.Id.As("AccountId"))
10                   .Where(
11                       db.Urls.Shortened == shortened)
12                   .FirstOrDefault();

Em Simple.Data existem várias formas de fazer uma coisa, segue o site da documentação completa, você pode utilizar a que você achar melhor.
Notem que quando eu declaro List<Account> model = ..., o Simple.Data já faz o cast automático para o tipo que eu estou declarando, mas as propriedades e as colunas precisam ter o mesmo nome.
No Simple.Data eu não posso utilizar interface para fazer o cast por exemplo IList ao invés de List.

Configurando Log de SQL

No Simple.Data, é possível configurar para ele mostrar o SQL gerado no Output do Visual Studio.
É só adicionar as linhas abaixo no Web.config de sua aplicação web por exemplo, o exemplo completo está no GitHub

1 <system.diagnostics>
2   <switches>
3     <add name="Simple.Data" value="Information" />
4   </switches>
5 </system.diagnostics>

Suporte a vários bancos de dados SQL e NoSQL

Simple.Data consegue fornecer suporte a vários bancos de dados por causa de sua linguagem própria para realizar as operação no banco de dados.

Atualmente, ele dá suporte para:

  • Acesso baseado em ADO para bancos de dados relacionais:
    • SQL Server 2005 e versões posterior (incluindo SQL Azure)
    • SQL servidor Compact Edition 4.0
    • Oracle
    • MySQL 4.0 e posterior
    • SQLite
    • PostgreSQL
    • SQLAnywhere
    • Informix
  • MongoDB
  • OData

O suporte a Azure Table Storage está em desenvolvimento. Simple.Data também suporta Mono na versão 1.0.

Obrigado pela visita e até a próxima.