Last active
April 10, 2017 14:59
-
-
Save jean-lourenco/2457cdaa282030eb2098dae4268b1d51 to your computer and use it in GitHub Desktop.
Exemplo de utilizaçãodo ORMLite, da ServiceStack
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
public static void Main() | |
{ | |
var paraCadastrar = new TipoTransformacao[] | |
{ | |
new TipoTransformacao{ Chave = "CSVDEFAULT", Descricao = "Descrição detalhada (ou não)" }, | |
new TipoTransformacao{ Chave = "JSONDEFAULT", Descricao = "Descrição detalhada (ou não)" }, | |
new TipoTransformacao{ Chave = "YAML", Descricao = "Descrição detalhada (ou não)" }, | |
new TipoTransformacao{ Chave = "INIT", Descricao = "Descrição detalhada (ou não)" }, | |
new TipoTransformacao{ Chave = "CONFIG", Descricao = "Descrição detalhada (ou não)" }, | |
new TipoTransformacao{ Chave = "BSON", Descricao = "Descrição detalhada (ou não)" }, | |
new TipoTransformacao{ Chave = "HOCON", Descricao = "Descrição detalhada (ou não)" }, | |
new TipoTransformacao{ Chave = "XML", Descricao = "Descrição detalhada (ou não)"} | |
}; | |
// Com o ORMlite, é preciso ter uma prop de 'Id' para cada FK. Neste caso TipoTransformacao e TipoTransformacaoId | |
var clienteDados = new Cliente{ Nome = "John Hathrone", Cnpj = "12112638000101", DiretorioPadrao = "john-hathorne", Email = "[email protected]", Telefone = "4796969696", TipoTransformacaoId = 42}; | |
var dbFactory = new OrmLiteConnectionFactory("Server=LOURENCO\\SQLEXPRESS;Database=rtm-hub;Trusted_Connection=True;", SqlServerDialect.Provider); | |
using (var session = dbFactory.Open()) | |
{ | |
// Importante: abrir transação com OpenTransaction, não BeginTransaction! | |
using (var tran = session.OpenTransaction()) | |
{ | |
// Helper query por Id | |
var tipoCliente = session.SingleById<TipoTransformacao>(42); | |
// Insert All :o | |
session.InsertAll(paraCadastrar); | |
// Select comum, suporta métodos LINQ | |
var tipos = session.Select<TipoTransformacao>(); | |
foreach (var tipo in tipos) | |
{ | |
Console.WriteLine($@" | |
Id: {tipo.Id} | |
Chave: {tipo.Chave} | |
Descricao: {tipo.Descricao}"); | |
} | |
// Aqui estamos salvando um cliente com sua dependência (TipoTransformacao) | |
// Como sua dependência já exite, é necessário setar o Id dela no Cliente (como é feito na linha 16) | |
// Porém, se as dependências forem cadastradas junto com o Cliente, seria necessário só passar true como segundo parâmetro | |
session.Save(clienteDados); | |
Console.WriteLine($"Cliente Inserido: ${clienteDados.Id}"); | |
// Expressão de query com Join | |
// Baseado em Convensões, não precisamos especificar o On da query (mas é possível, se necessário) | |
var query = session | |
.From<Cliente>() | |
.Join<TipoTransformacao>() | |
.Where(c => c.Id == 2); | |
// Usuando o LoadSelect ao invés do Select faz com que as dependências sejam mapeadas junto com a entidade Cliente | |
// Para isso, a prop Cliente.TipoTransformacao deve ser decorada com o attr [Reference] | |
var cd = session.LoadSelect(query).Single(); | |
Console.WriteLine($"ClienteId: {cd.Id}; TipoTransformação: {cd.TipoTransformacao.Id}, {cd.TipoTransformacao.Chave}"); | |
tran.Rollback(); | |
} | |
} | |
Console.ReadKey(); | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment