Entity Framework - Herencia
La herencia le permite crear modelos complejos que reflejan mejor la forma de pensar de los desarrolladores y tambien reducen el trabajo necesario para interactuar con estos modelos. La herencia usada con entidades tiene el mismo proposito que la herencia usada con classs, por lo que los desarrolladores ya conocen los conceptos basicos de como funciona esta caracteristica.
Echemos un vistazo al siguiente ejemplo y creemos un nuevo proyecto de aplicacion de consola.
Paso 1 : agregue el modelo de data de la entidad ADO.NET haciendo clic derecho en el nombre del proyecto y seleccionando Agregar → Nuevo elemento…
Paso 2 : agregue una entidad y asignele el nombre Persona siguiendo todos los pasos mencionados en el capitulo Primer enfoque del modelo.
Paso 3 : agregue propiedades escalares como se muestra en la siguiente imagen.
Paso 4 : agregaremos dos e masLas entidades Estudiante y Profesor , que heredaran las propiedades de la Tabla de personas.
Paso 5 - Ahora agregue una entidad Estudiante y seleccione Persona en la lista desplegable Tipo de base como se muestra en la siguiente imagen.
Paso 6 - Del mismo modo, agregue un profesor de entidad.
Paso 7 : ahora agregue la propiedad escalar EnrollmentDate a la entidad Student y la propiedad HireDate a la entidad Teacher.
Paso 8 - Sigamos adelante y generemos la base de data.
Paso 9 - Haga clic derecho en superficie de diseno y seleccione Generar base de data a partir de plantilla…
Paso 10 - Para crear una nueva base de data, haga clic en Nueva conexion ... El fo El siguiente cuadro de dialogo se abre. Haga clic en Aceptar.
Paso 11 : haz clic en Finalizar. Esto agregara el archivo * .edmx.sql al proyecto Puede ejecutar DDL en Visual Studio abriendo el archivo .sql. Ahora haga clic derecho y seleccione Ejecutar.
Paso 12 - Vaya al explorador del servidor, vera que la base de data se crea con tres tablas que se especifican.
Paso 13 - Tambien puede ver que las siguientes classs de dominio tambien se generan automaticamente.
publico class parcial Persona {public int ID {get; juntos; } cadena publica FirstMidName {get; juntos; } cadena publica LastName {get; juntos; }} class parcial publica Estudiante: Persona {System.DateTime EnrollmentDate {get; juntos; }} Clase publica parcial Profesor: Persona {Public System.DateTime HireDate {get; juntos; }}
Esta es la class de contexto.
class publica parcial InheritanceModelContainer: DbContext {public InheritanceModelContainer (): base ( "name = InheritanceModelContainer ") {} anulacion protegida void OnModelCreating (DbModelBuilder modelBuilder) {lanzar nueva UnintentionalCodeFirstException } Publico virtual dbSet People {get; juntos; }}
Agreguemos algunos estudiantes y profesores a la base de data y luego los obtengamos de la base de data.
class Program {static void Main (string args) {using (var context = new InheritanceModelContainer ()) {var student = new Student {FirstMidName = "Meredith ", LastName = " Alonso ", EnrollmentDate = DateTime.Parse (DateTime.Today.ToString ())}; context.People.Add (estudiante); var estudiante1 = nuevo estudiante {FirstMidName = "Arturo ", LastName = "Anand ", EnrollmentDate = DateTime.P ass (DateTime.Today.ToString ())}; context.People.Add (estudiante1); var techaer = nuevo maestro {FirstMidName = "Peggy ", LastName = "Justice ", HireDate = DateTime.Parse (DateTime.Today.ToString ())}; context.People.Add (techaer); var techaer1 = nuevo profesor {FirstMidName = "Yan ", LastName = "Li ", HireDate = DateTime.Parse (DateTime.Today.ToString ())}; context.People.Add (techaer1); context.SaveChanges }}}
Los estudiantes y profesores se agregan a la base de data. Para recuperar tanto a los alumnos como al profesor, se debe utilizar el metodo OfType , que devolvera al alumno y al profesor vinculados al departamento especificado.
Consola. WriteLine ( "Todos los estudiantes en la base de data "); Console.WriteLine ( "); foreach (var estudiante en context.People.OfType ()) {string name = student.FirstMidName + " + student.LastName; Console.WriteLine ( "ID: {0}, Nombre: {1}, tFecha de inicio {2} ", Student.ID, nombre, estudiante.EnrollmentDate.ToString ()); } Console.WriteLine ( "); Console.WriteLine ( "***************************************** ** **************** ***** "); Console.WriteLine ( "); Console.WriteLine ( "Todos los profesores en la base de data "); Console.WriteLine ( "); para cada (var teacher in context.People.OfType ()) {string name = teacher.FirstMidName + " + teacher.LastName; Console.WriteLine ( "ID: {0}, Nombre: {1}, tHireDate {2} ", teacher.ID, nombre, teacher.HireDate.ToString ()); } Console.WriteLine ( "); Console.WriteLine ( "****************************************** ** **************** ***** "); Console.ReadKey
En la primera solicitud, cuando use OfType (), no podra acceder a HireDate porque la propiedad HireDate es parte de la Entidad del profesor y, de la misma forma, la propiedad EnrollmentDate no sera use OfType ()
Cuando se ejecute el codigo anterior, recibira el siguiente resultado:
Todos los estudiantes en la base de data ID de data: 1, Nombre: Meredith Alonso, registro Fecha del articulo 30/10/2015 12:00:00 AM ID: 2, Nombre: Arturo Anand, Fecha de inicio 30/10/2015 12:00:00 AM : 00 AM *************** ************************************************* Todos los profesores en la base de data ID: 3, Nombre: Peggy Justice, HireDate 10/30/2015 00 h 00:00 ID: 4, Nombre: Yan Li, HireDate 10/30/2015 00:00 00:00 **** ***************************** ******************** ***********
Le recomendamos que ejecute el siguiente ejemplo arriba paso a paso para una mejor comprension.