Entity Framework - Entity Disconnected Entities
En este capitulo, veamos como realizar cambios en las entidades que no estan seguidas de un contexto. Las entidades que no van seguidas de un contexto se denominan entidades "desconectadas ".
-
Para la mayoria de las aplicaciones de un solo nivel, donde la interfaz de usuario y las capas de acceso a la base de data estan ejecutar en el mismo proceso de aplicacion, es probable que solo realice operaciones en entidades seguidas de un contexto.
-
Las operaciones en entidades desconectadas son mucho mas comunes en aplicaciones de N niveles.
-
Las aplicaciones N-Tier implican recuperar data de un servidor y enviarlos de vuelta, a traves de la red, a una maquina cliente.
-
La aplicacion cliente luego manipula estos data antes de enviarlos de vuelta al servidor para que sean persistentes.
Estos son los dos pasos a seguir con un grafico de entidad sin conexion o incluso con una sola entidad sin conexion.
Echemos un vistazo al siguiente codigo donde la entidad Student se agrega con dos entidades de inion.
programa de class {static void Main (string args) {var student = new Student {ID = 1001, FirstMidName = "Wasim ", LastName = "Akram ", EnrollmentDate = DateTime.Parse ( "2015-10-10 "), Enrollments = new List {New Enrollment {EnrollmentID = 2001, CourseID = 4022, StudentID = 1001}, nuevo EnrollmentID = 2002 , CourseID = 4025, StudentID = 1001},}}; usando (var context = new UniContextEntities ()) {context.Students.Add (estudiante); Console.WriteLine ( "Nuevo estudiante ({0} {1}): {2} ", estudiante. Nombre medio, estudiante. Apellido, contexto.Entrada (estudiante). Estado); foreach (inion var en student.Enrollments) {Console.WriteLine ( "ID de Inion: {0} Estado: {1} ", inion.EnrollmentID, context.Entry (inion) .State); } Console.WriteLine ( "Presione cualquier tecla para salir ... "); Console.ReadKey }}}
-
El codigo construye una nueva instancia de Estudiante, que tambien hace referencia a dos nuevas instancias de Enrollment en su propiedad Enrollments.
-
A continuacion, el nuevo alumno se agrega a un contexto usando el metodo Add.
-
Una vez que se agrega el alumno, el codigo utiliza el metodo DbContext.Entry para acceder a la informacion de seguimiento de cambios de Entity Framework para el nuevo alumno.
-
A partir de esta informacion de seguimiento de cambios, la propiedadEl estado se usa para escribir el estado actual de la entidad.
-
Este proceso luego se repite para cada una de las iniones recien creadas a las que hace referencia el nuevo estudiante. Si ejecuta la aplicacion, recibira el siguiente resultado:
Nuevo estudiante (Wasim Akram): ID de Inion agregado : 2001 Estado: ID de inion agregado: 2002 Estado: Agregado Presione cualquier tecla para salir ...
Mientras que DbSet.Add se usa para informar a Entity Framework sobre nuevas entidades , DbSet.Attach se usa para notificar a Entity Framework sobre entidades existentes. El metodo Attach marcara una entidad en el estado Sin cambios.
Echemos un vistazo al siguiente codigo C # en el que se adjunta una entidad desconectada con DbContext.
class Program {static void Main (string args) {var student = new Student {ID = 1001, FirstMidName = "Wasim ", LastName = "Akram ", EnrollmentDate = DateTime.Parse (" 2015-10-10 "), Enrollments = new List {New Enrollment {EnrollmentID = 2001, CourseID = 4022, StudentID = 1001}, New Enrollment {EnrollmentID = 2002, CourseID = 4025, StudentID = 1001},}}; usando (var context = new UniContextEntities ()) {context.Students.Attach (estudiante); Console.WriteLine ( "Nuevo estudiante ({0} {1}): {2} ", student.FirstMidName, student.LastName, context.Entry (student) .State); foreach (inion var in student.Enrollments) {Console.WriteLine (" ID de Inion: {0} State : {1} ", inion.EnrollmentID, context.Entry (inion) .State);} Console.WriteLine (" Presione cualquier tecla para salir ... "); Console.ReadKey () ;}}}
Cuando el codigo anterior se ejecuta con el metodo Attach (), recibira el siguiente resultado.
Nuevo estudiante ( Wasim Akram): ID de Inion sin cambios: 2001 Estado: ID de Inion sin cambios: 2002 Estado: sin cambios Prensaen cualquier tecla para salir ...