L'ORM SnapObjects
L'ORM per .NET semplice, potente ed ultraveloce
L'ORM SnapObjects facilita enormemente lo sviluppo .NET! E' incredibilmente semplice, eppure è pieno di funzionalità. Ti offre il pieno controllo sullo SQL generato, e nella pratica ha le stesse prestazioni di ADO.NET.
Vantaggi
Codice sempice e minimale
Funzionalità avanzate semplice da codificare, ed accesso ai dati integrato nei modelli per ridurre al minimo i tempi di manutenzione.
Ricerche Type-Safe
Gli oggetti .NET vengono usati come criteri di ricerca in modo type-safe, e vengono fornite API di test per verificare lo SQL.
Generazione flessibile dello SQL
La generazione dello SQL è controllata attraverso un insieme comprensivo di attributi del modello, o se si preferisce attraverso il codice SQL grezzo.
Relazioni leggere
Le relazioni sono definite durante la codifica (non pre-definite) e persistono solo per una particolare ricerca.
Orientato alla transazione
Le ricerche, gli aggiornamenti e le azioni possono essere tracciate, perciò la gestione delle transazioni sono applicate automaticamente.
Performance ultraveloci
C'è un certo vantaggio su ADO.NET, e le ricerche, gli aggiornamenti e le azioni vengono eseguite in blocco.
Frammenti di codice
- 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
Funzionalità
Modello
Il Modello mappa le colonne nelle tabelle del database e contiene il relativo SQL. Lo SQL del Modello Model è generato sulla base di vari attributi, così da dare agli sviluppatori il controllo sullo SQL. Perciò il Modello può rappresentare relazioni complesse, come Master-Detail-Detail attraverso la nidificazione del Modello.
Definisce la ricerca SQL
Definisce le operazioni SQL di Insert/Update/Delete per la tabella mappata
SQLModelMapper
Lo SQLModelMapper è un componente transaction-oriented per la manipolazione di dati. Mette a disposizioone oggetti e metodi per semplificare le operazioni CRUD del tuo database, ed applica una gestione automatica delle transazioni agli elementi tracciati. Gli elementi tracciati possono essere eseguiti in blocco per accelerare le performance.
Ricerca
Esegue ricerche e carica l'insieme dei risultati in un oggetto temporaneo per ulteriore processamento, oppure restituisce l'insieme del risultato calcolato.
Caricamento semplice
Esegue ricerche definite nel modello e carica l'insieme dei risultati in un oggetto autogenerato.
Caricamento aggregato & scalare
Esegue la ricerca definita nel modello e restituisce l'insieme dei risutati con calcolo aggregato oppure scalare.
Tracciamento
Traccia i cambiamenti del modello, dello SQL e delle azioni a beneficio della gestione delle transazioni.
Modello di tracciamento
Traccia e mette in cache le operazioni di Insert/Update/Delete del database nel modello (o nei modelli).
Tracciamento del CUD SQL
Traccia le operazioni di Insert/Update/Delete nelle tabelle del database.
Tracciamento Master/Detail
Traccia e mette in cache lo stato dei dati nel modello (o nei modelli) che sono in una relazione di tipo Master-Detail.
Esecuzione
Inserisce tutte le operazioni del database che sono state tracciate nei modelli, nello SQL o nelle azioni nel database eseguendole in una volta sola e fa gestire la transazione al ModelMapper al posto tuo.
SaveChanges
Salva tutte le modifiche al database eseguendo tutti gli elementi tracciati (cambiamenti del modello, dello SQL e delle azioni). Gli elementi tracciati possono essere eseguiti in blocco per aumentarle le performance.
Asincronicità
Esegue operazioni CRUD in modalità asincrona.
SQLExecutor
Asincronicità
Esegue dichiarazioni SQL in maniera asincrona.
SQLBuilder
Costruzione
Costruisce la struttura sintattica SQL.