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.