SnapObjects ORM
Simple, Potente y ultrarrápido ORM para .NET
El ORM SnapObjects hace que el desarrollo de .NET sea muy sencillo!. Es increíblemente simple pero no escatima en funciones. Te da un control total sobre el SQL generado. Y funciona prácticamente como ADO.NET.
Beneficios
Codificación simple y mínima
Funcionalidad avanzada fácil de codificar, y el acceso a los datos está en modelos para minimizar el esfuerzo de mantenimiento.
Type-Safe Queries
Los objetos .NET se utilizan como criterios de consulta segura y se proporcionan APIs de prueba para verificar SQL.
Generación flexible de SQL
La generación de SQL se controla a través de un gran conjunto de atributos de modelo, o código SQL sin procesar, si así lo prefieres.
Relaciones libres
Las relaciones se definen durante la codificación (no están predefinidas) y solo persisten para una consulta en particular.
Orientado a transacciones
Se puede realizar un seguimiento de las consultas, actualizaciones y acciones, y luego la gestión de transacciones ses aplica automáticamente.
Rendimiento ultrarrápido
Hay poca sobrecarga en ADO.NET, y las consultas, actualizaciones y acciones se ejecutan de forma masiva.
Fragmentos 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
Características
Modelo
El modelo asigna columnas a las tablas de la base de datos y contiene el SQL relacionado. El SQL del modelo se genera en función de varios atributos, lo que les da a los desarrolladores control sobre el SQL. Y el modelo puede representar relaciones complejas, como maestro-detalle-detalle mediante los modelos anidados.
Definiendo consultas SQL
Definiendo operaciones SQL Insert/Update/Delete para una tabla asignada
SQLModelMapper
SQLModelMapper es un componente de manipulación de datos orientado a transacciones. Proporciona objetos y métodos para simplificar las operaciones CRUD de la base de datos y aplica gestión automática de transacciones a los elementos rastreados. Los elementos rastreados se pueden ejecutar de forma masiva para mejorar el rendimiento.
Consultas
Ejecuta consultas y carga, el conjunto de resultados en un objeto temporal para su posterior procesamiento o devuelve el conjunto de resultados calculado.
Carga plana
Ejecuta consultas definidas en el modelo y carga el conjunto de resultados en un objeto autogenerado.
Carga total o a escala
Ejecuta la consulta definida en el modelo y devuelve el conjunto de resultados con cálculo total o a escala.
Seguimiento
Realiza rastreo de los cambios de modelo, SQL y acciones con el fin de gestionar las transacciones.
Modelo de seguimiento
Rastrea y almacena en caché la operación de la base de datos Insertar/Actualizar/Eliminar en los modelos.
Seguimiento SQL CUD
Realiza un seguimiento de las operaciones Insert/Update/Delete de la tabla de la base de datos.
Seguimiento Master/Detail
Rastrea y almacena en caché el estado de los datos en los modelos que están en la relación Maestro-Detalle.
Ejecutar
Envía todas las operaciones de la base de datos rastreadas en modelos, SQL o acciones a la base de datos para ejecutar de una sola vez y dejar que ModelMapper madministre la transacción por ti.
SaveChanges
Guarda todos los cambios en la base de datos ejecutando los elementos rastreados (cambios de modelo, SQL y acciones). Los elementos rastreados se pueden ejecutar de forma masiva para mejorar el rendimiento.
Async
Ejecuta operaciones CRUD de forma asíncrona.
SQLExecutor
Async
Ejecuta sentencias SQL de forma asíncrona.
SQLBuilder
Build
Construye la estructura de sintaxis SQL.