.NET

31 mai, 2012

Conhecendo o Thunderstruck

Publicidade

O Thunderstruck é uma biblioteca .NET que faz o acesso ao banco de dados mais simples e mais rápido usando ADO.NET. É uma maneira muito rápida para acessar bancos de dados.

Ele não é um ORM e não abstrai o “todo-poderoso” banco de dados, apenas torna o acesso mais fácil!

Baixar a versão binária estável de Thunderstruck. O código fonte está no Github.

http://www.apache.org/licenses/LICENSE-2.0

Guia Rápido

DataContext

String de conexão padrão

<connectionStrings>
<add name="Default" providerName="" connectionString="" />
</connectionStrings>

DataContext padrão.

using (var context = new DataContext())
{
context.Execute("DELETE FROM Cars");
context.Execute("DELETE FROM Tools");
context.Commit();
}

DataContext não-transacional.

using (var context = new DataContext(Transaction.No))
{
context.Execute("DELETE FROM Cars");
context.Execute("DELETE FROM Tools");
}

Usando outro banco de dados (string de conexão).

new DataContext("ConnectionStringName", Transaction.Begin)

Obter um valor a partir do banco de dados.

var query = "SELECT COUNT(Id) FROM Tools";
object toolsCount = context.GetValue(query);

Ou tipado…

int toolsCount = context.GetValue<int>(query);

Ou obter muitos valores…

var query = "SELECT Name FROM Tools";
var toolsName = context.GetValues<string>(query);

Lista de objetos do banco de dados.

var cars = context.All<Car>("SELECT * FROM Cars");

Parâmetros de ligação

Propriedades de ligação.

var car = new Car { Name = "Esprit Turbo", ModelYear = 1981 };
var command = "INSERT INTO Car VALUES (@Name, @ModelYear)";
context.Execute(command, car);

Selecione os cars do futuro

var query = "SELECT * FROM Car WHERE ModelYear > @Year";
car futureCars = context.All<Car>(query, DateTime.Today);

Você pode vincular um Dicionário <string, object> também.

DataObjectCommand

Criando um objeto command.

var command = new DataObjectCommand<Car>();

Com propriedade.

public DataObjectCommand<Car> Command
{
get { return new DataObjectCommand<Car>(); }
}

Insert.

var car = new Car { Name = "Esprit Turbo", ModelYear = 1981 };
command.Insert(car);

Inserir binds da chave primária gerada.

// car.Id == 0
command.Insert(car);
// car.Id > 0

DataObjectCommand transacional

Command.Insert(car, context);

(...)

context.Commit();

Update e Delete têm o mesmo comportamento.

car.Name = "Esprit S3";
Command.Update(car);

Command.Delete(car)

DataObjectQuery

Criar um objeto query.

var select = new DataObjectQuery<Car>();

Ou…

new DataObjectQuery<Car>(table: "TB_CARS");

new DataObjectQuery<Car>(primaryKey: "IdCar");

new DataObjectQuery<Car>(table: "TB_CARS", primaryKey: "IdCar");

Com propriedade.

public DataObjectQuery<Car> Select
{
get { return new DataObjectQuery<Car>(); }
}
var allCars = Select.All();

var lotusCars = Select.All("WHERE Name Like '%Lotus%'");

var newerCar = Select.First("ORDER BY ModelYear DESC");

Parâmetros de ligação.

anyObject.CarName = "Lotus Esprit Turbo";

var cars = Select.All("WHERE Name = @CarName", anyObject);

DataObjectQuery transacional.

Select.With(context).First("ORDER BY ModelYear DESC");

DataObjects personalizados

Se TB_CARS é o nome da tabela.

DataObjectCommand personalizado.

new DataObjectCommand<Car>("TB_CAR");

DataObjectQuery personalizado.

new DataObjectQuery<Car>("Name, ModelYear FROM TB_CAR");

Projeção com os campos padrão.

new DataObjectQuery<Car>("{0} FROM TB_CAR");

Mais

Usando um provedor personalizado.

ProviderResolver.CustomProviderType = typeof(MyProvider);

Alterando o nome padrão da string de conexão.

DataContext.DefaultConnectionStringName = "OtherDatabase";

?

Texto original disponível em http://www.wagnerandrade.com/thunderstruck