SnapObjects ORM
ORM para .NET Simples, Poderoso, Ultra-Rápido
SnapObjects ORM faz o desenvolvimento .NET em um instante! É incrivelmente simples, mas não economiza em recursos. Dá a você controle total sobre o SQL gerado. E tem um desempenho praticamente igual ao ADO.NET.

Benefícios
Codificação minima e simples
Código simples de funcionalidade avançada e acesso a dados em modelos para minimizar o esforço em manutenção.
Consultras de tipo seguro
Os objetos .NET são usados como critérios de consulta de maneira segura, e APIs de teste são fornecidas para verificar o SQL.
Geração flexível de SQL
A geração de SQL é controlada por meio de um conjunto abrangente de atributos de modelo, ou código SQL bruto, se preferir.
Relacionamentos soltos
Os relacionamentos são definidos durante a codificação (não predefinidos) e persistem apenas para uma consulta específica.
Transação orientada
Consultas, atualizações e ações podem ser rastreadas e, em seguida, o gerenciamento de transações é aplicado automaticamente.
Desempenho ultra-rápido
Há pouca sobrecarga no ADO.NET, e consultas, atualizações e ações são executadas em massa.
Partes de código
- Model
- Retrieve
- Delete
- Update
- Transaction
Generating complex SQL queries is controlled by intuitive attributes applied to the model.
namespace Appeon.SqlModelMapperDemo.Models
{
//Generates the underlying SQL query according to the attributes
[Top(1000)]
[SqlParameter("custId", typeof(int))]
[SqlParameter("stratOrderDate", typeof(DateTime))]
[SqlParameter("endOrderDate", typeof(DateTime))]
[Table("SalesOrderHeader",Schema = "Sales")]
[SqlWhere("(CustomerId = :custId) and (Orderdate Between :stratOrderDate and :endOrderDate)")]
public class SalesOrder
{
[Key]
[Identity]
public int SalesOrderID { get; set; }
[Required]
public DateTime? OrderDate { get; set; }
[Required]
public byte? Status { get; set; }
[Required]
public bool? OnlineOrderFlag { get; set; }
[SqlCompute("(isnull(N'SO'+CONVERT([nvarchar](23),[SalesOrderID]),N'*** ERROR ***'))")]
public string SalesOrderNumber { get; set; }
[Required]
public int? CustomerID { get; set; }
[SqlCompute("(isnull(([SubTotal]+[TaxAmt])+[Freight],(0)))")]
public decimal? TotalDue { get; set; }
public DateTime? ModifiedDate { get; set; }
//Nests a model and applies various attributes
[JsonIgnore]
[SetValue("$SalesOrderID", "$SalesOrderID", SetValueStrategy.Always)]
[ModelEmbedded(typeof(SalesOrderDetail), ParamValue = "$SalesOrderID",
CascadeCreate =true, CascadeDelete = true)]
public IList< salesorderdetail> OrderDetails { get; set; }
}
}
Retrieving data and loading it into the model only requires parameters – no unproductive query language is necessary.
//Retrieves multiple rows of data, loads it into the model, and then puts it into a list
_context.SqlModelMapper.Load< salesorderquery>(startDate, endDate, customerId)
.ToList();
//Retrieves a single row of data and loads it into the model
_context.SqlModelMapper.LoadByKey< salesorder>(orderId)
.FirstOrDefault();
Deleting data (including data of a master-detail) only requires a key or the model.
//Deletes data corresponding with the specified key – either a single row of data or if a nested model then the cascaded data
_context.SqlModelMapper.TrackDeleteByKey< salesorder>(orderId)
.SaveChanges()
// Deletes data corresponding with the specified model – either a single row of data or if a nested model then the cascaded data
_context.SqlModelMapper.TrackDelete(salesOrder)
.SaveChanges()
Saving data is controlled by intuitive tracking functions, with granular control whether to save the entire master-detail relationship or portion thereof (by including/excluding the appropriate TrackDetails).
//Saves data with a master-detail-detail relationship
_context.SqlModelMapper.TrackMaster(header)
.TrackDetails(o => o.SalesReasons, reasons)
.TrackDetails(o => o.Details, details);
_context.SqlModelMapper.SaveChanges();
Managing transactions is made effortless by powerful implicit capability – comprehensive tracking functions (that go way beyond tracking just the model) determine what is included.
//Tracks various models, raw SQL, and actions
_context.SqlModelMapper.TrackCreate(salesOrder)
.Track((saveContext) =>
{
//C# code block
……
}) //The C# code block will be executed when SaveChanges is called
.TrackUpdate(salesPerson)
.TrackSqlCUD(rawSql)
.SaveChanges() //Executes all tracked items in one transaction and automatically commits or rolls back
Caracteristicas
Model
O modelo mapeia colunas para tabelas de banco de dados e contém o SQL relacionado. O SQL do Modelo é gerado com base em vários atributos, o que dá aos desenvolvedores controle sobre o SQL. E o modelo pode representar relacionamentos complexos, como Mestre-Detalhe-Detalhe por meio do aninhamento do Modelo.
Define SQL Query
Define as operações de SQL Insert/Update/Delete para a tabela mapeada

SQLModelMapper
O SQLModelMapper é um componente de manipulação de dados orientado a transações. Ele fornece objetos e métodos para simplificar as operações CRUD do banco de dados e aplica o gerenciamento automático de transações a itens rastreados. Os itens rastreados podem ser executados em massa para aumentar o desempenho.
Query
Executa query e carrega o conjunto de resultados em um objeto temporário para processamento posterior ou retorna o conjunto de resultados calculado.
Plain Load
Executa consultas definidas no modelo e carrega o conjunto de resultados em um objeto autogerado.
Aggregate e Scalar Load
Executa a consulta definida no modelo e retorna o conjunto de resultados com cálculo agregado ou escalar.
Tracking
Rastreia mudanças de modelo, SQLs e ações para fins de gerenciamento de transações.
Track Model
Rastreia e armazena em cache a operação insert / update/ delete do banco de dados no (s) modelo (s).
Track SQL CUD
Rastreia as operações de insert/update /delete da tabela do banco de dados.
Track Master/Detail
Rastreia e armazena em cache o estado dos dados no (s) modelo (s) que estão no relacionamento Mestre-Detalhe.
Execute
Envie todas as operações de banco de dados rastreadas em modelos, SQLs ou ações para o banco de dados de uma só vez para executar e permitir que o ModelMapper gerencie a transação para você.
SaveChanges
Salva todas as alterações no banco de dados executando os itens rastreados (alterações de modelo, SQLs e ações). Os itens rastreados podem ser executados em massa para aumentar o desempenho.
Async
Executa operações CRUD de maneira assíncrona.
SQLExecutor
Async
Executa instruções SQL de maneira assíncrona.