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