Transacciones con Entity Framework
Un ejemplo de uso podría ser:
using (ModelContextContainer context= new ModelContextContainer()) { context.Connection.Open(); DbTransaction tx = context.Connection.BeginTransaction(); //Operacion 1 //....... context.SaveChanges(); //Operacion 2 //....... context.SaveChanges(); tx.Commit();//aqui se salvan todas las operaciones context.Connection.Close(); }
Más información: Administrar conexiones y transacciones (Entity Framework)
Usar SQL en Entity Framework
Hay distintas posibilidades, a continuación se expondrán algunas de ellas:
1 – Se puede utilizar el método ExecuteStoreQuery para lanzar queries contra el origen de datos:
using (SchoolEntities context = new SchoolEntities()) { // Use the parameter substitution pattern. foreach (string name in context.ExecuteStoreQuery< string > ("Select Name from Department where DepartmentID < {0}", 5)) { Console.WriteLine(name); } // Use parameter syntax with object values. foreach (string name in context.ExecuteStoreQuery< string > ("Select Name from Department where DepartmentID < @p0", 5)) { Console.WriteLine(name); } // Use an explicit SqlParameter. foreach (string name in context.ExecuteStoreQuery< string > ("Select Name from Department where DepartmentID < @p0", new SqlParameter { ParameterName = "p0", Value = 5 })) { Console.WriteLine(name); } }
2 - Otra forma sería usar el método translate para convertir un DbDataReader en (siguiente el ejemplo anterior) objetos del tipo Department.
3 - También tenemos el método ExecuteStoreCommand, que permite ejecutar comandos directamente contra el origen de datos: insert, update,...
4 - Otra posibilidad que nos permite Entity Framework consiste en crear una EntityConnection para usar un EntityCommand
NorthwindEntities context = new NorthwindEntities(); EntityConnection conn = new EntityConnection(context.Connection.ConnectionString); conn.Open(); var sql = "SELECT VALUE emp FROM NorthwindEntities.Employees AS emp"; EntityCommand cmd = new EntityCommand(sql, conn); DbDataReader reader = cmd.ExecuteReader(CommandBehavior.SequentialAccess); while (reader.Read()) { Console.WriteLine("{0} {1} {2} {3}", reader["EmployeeID"], reader["LastName"], reader["FirstName"], reader["Country"]); }
Fuentes:
Cómo: Ejecutar directamente comandos contra el origen de datos en .Net Framework 4
Cómo ejecutar una consulta de Entity SQL parametrizada con EntityCommand
LINQ to Objects
Gracias a «LINQ to Objects» podemos hacer consultas LINQ directamente sobre cualquier colección IEnumerable o IEnumerable
Un ejemplo de uso podría ser el que muestro a continuación:
IEnumerable< Persona > persona = from p in personas.AsEnumerable() where p.Name.StartsWith("S") orderby p.Name select p;
Se realiza una consulta sobre una lista de personas que me devuelve todas aquellas personas cuyo nombre comienza por la letra S. Además, realiza una ordenación por nombre.
Persona: sería una clase con p.e. las propiedades Name, Apellidos, Edad.
List
Además, si se quiere se podría hacer algo mas amigable la consulta. Para por ejemplo no tener que escribir consultas muy grandes.
Func< Persona, bool > func = delegate(Persona person){ return person.Name.StartsWith("S"); } IEnumerable< Persona > persona = (from p in personas.AsEnumerable() select p) .Where(func) .OrderBy< Persona, string >(per => per.Name);
Aquí se realiza exactamente lo mismo que antes, con la diferencia de que he creado una función para evaluar las condiciones del Where (está función debe tener como mínimo un objeto de entrada y debe devolver bool).
En el ejemplo he utilizado un Where sobre una IEnumerable pero también se podría hacer lo mismo para IQueryable, usando Exressions en este caso.
public static IQueryable< TSource > Where< TSource >( this IQueryable< TSource > source, Expression< Func < TSource, bool > > predicate ) public static IEnumerable< TSource > Where< TSource >( this IEnumerable< TSource > source, Func< TSource, bool > predicate )
Categorias
- adobe (2)
- agile (1)
- Alfresco (1)
- Android (26)
- Angular (6)
- angularjs (10)
- apache (1)
- axis (2)
- Bases de datos (14)
- Bootstrap (1)
- C# (3)
- Cámara (1)
- chrome (3)
- Codeigniter (2)
- Control de Versiones (2)
- CSS (25)
- CVS (1)
- Django (9)
- Django Rest Framework (1)
- DNS (1)
- Docker (3)
- dominio (1)
- eclipse (5)
- Entity Framework (2)
- ETL (1)
- Firefox (6)
- flash (1)
- freecad (1)
- Git (12)
- GitHub (4)
- gpg (2)
- Groovy (1)
- Handlebars (1)
- hibernate (4)
- hosting (1)
- HTML (50)
- HTML 5 (26)
- Impresión 3D (9)
- Inkscape (1)
- IOS (2)
- ireports (3)
- Java (44)
- Javascript (55)
- JBoss (5)
- JPA (2)
- JQuery (20)
- Json (7)
- JSP (6)
- Keycloak (1)
- Lamp (1)
- LDAP (2)
- lean (1)
- linkedin (1)
- LINQ (1)
- linux (13)
- Livecycle (1)
- log (1)
- microcontroladores (1)
- MongoDB (4)
- MySQL (8)
- Node.js (5)
- OC4J (1)
- Openshift (2)
- Oracle (6)
- Patrones de Diseño (1)
- Photoshop (2)
- php (20)
- PostgreSQL (1)
- python (19)
- rabbitmq (1)
- Raspberry PI (13)
- Raspherry PI (5)
- React (6)
- seguridad (3)
- Selenium (3)
- Sencha Touch (1)
- Sin categoría (29)
- Spring (17)
- spring-boot (3)
- SQL (7)
- SQLServer (1)
- SSO (1)
- struts (2)
- SVN (1)
- Talend (1)
- Tomcat (6)
- unity (3)
- Visual Studio Code (2)
- vmware (5)
- Web Services (11)
- windows (18)
- wordpress (10)
- Xiaomi (1)
- xml (2)
Trabajos Realizados
- App Android – Autoka Fr
- App Android – Cartelera Cántabra
- App Android – Gramática y Vocabulario Ingles
- App Android – Hoja de Gastos
- App Android – Hotel Torre Cristina
- App Android – OcioEnjoy
- App Android – Visor CardBoard
- App Firefox – Managapp
- DiamanteBomba – DisasterCode
- Generador de Partes de Trabajo
- GitHub – Android Web Generator
- GitHub – Dynamic Angular Gallery
- GitHub – Dynamic React Gallery
- GitHub – Sotilizator
- GitHub – SpringAngularJS
- GitHub – Swiper Dynamic Angular Gallery
- HazParejas – DisasterCode
- RompeCabezas – DisasterCode
- Unity Game – English Couple
- Unity Game – Kill Wasp
- WordPress – El Buen Apicultor
- WordPress – El Cajón de los Retales
- WordPress – El Vestidito Azul
- WordPress – Feuchas
- WordPress – Fragua de Navajas Ponce
- WordPress – Humor a las Tres
- WordPress – Photo Places