Skip to content

Instantly share code, notes, and snippets.

@jean-lourenco
Last active April 10, 2017 14:59
Show Gist options
  • Save jean-lourenco/2457cdaa282030eb2098dae4268b1d51 to your computer and use it in GitHub Desktop.
Save jean-lourenco/2457cdaa282030eb2098dae4268b1d51 to your computer and use it in GitHub Desktop.
Exemplo de utilizaçãodo ORMLite, da ServiceStack
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 = "john@hathorne.com", 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