Compartir a través de


Cómo agregar y modificar objetos con herencia de tabla por tipo (Entity Framework)

En este tema se usa el modelo Entity Data Model (EDM) definido en el tema Cómo definir un modelo con herencia de tabla por tipo (Entity Framework). Muestra cómo agregar una instancia del tipo derivado en una jerarquía de herencia de tabla por tipo.

Para crear un proyecto mediante la herencia de tabla por tipo

  1. Cree un proyecto de aplicación de consola denominado SchoolDataClient y agregue referencias a System.Data.Entity y System.Runtime.Serialization.

  2. Agregue una referencia a la biblioteca DLL generada con la jerarquía de herencia que se describe en el tema Cómo definir un modelo con herencia de tabla por tipo (Entity Framework).

  3. Agregue los esquemas del tema Cómo definir un modelo con herencia de tabla por tipo (Entity Framework) a la misma carpeta donde está el archivo ejecutable SchoolDataClient.

  4. Agregue un archivo de configuración de la aplicación al proyecto con el contenido siguiente.

<?xml version="1.0" encoding="utf-8"?>
<configuration>
  <connectionStrings><add name="SchoolDataLibContainer" 
   connectionString=
   "metadata=res://*/SchoolDataLib.csdl|
   res://*/SchoolDataLib.ssdl|
   res://*/SchoolDataLib.msl;provider=System.Data.SqlClient;
   provider connection string=&quot;
   Data Source=localhost;
   Initial Catalog=SchoolData;Integrated Security=True;
   MultipleActiveResultSets=True&quot;" 
   providerName="System.Data.EntityClient" />
  </connectionStrings>
</configuration>

Para agregar una instancia de un tipo derivado

  1. Cree una instancia del tipo DeptEngineering denominado newDept.

  2. Inicialice los datos de las propiedades de la clase newDept.

  3. Cree una instancia nueva del tipo Person.

  4. Asigne el valor 3 a la propiedad PersonCategory para indicar la categoría Administrator.

  5. Inicialice las propiedades de la clase newAdmin.

  6. Asigne el nuevo valor de Person a la propiedad Administrator de la clase newDept.

  7. Agregue newDept y newAdmin al almacenamiento y guarde los cambios.

Ejemplo

Option Explicit On
Imports System
Imports System.Collections.Generic
Imports System.Linq
Imports System.Xml
Imports System.Xml.Linq
Imports System.Text
Imports SchoolDataLib

Module Module1

    Sub Main()
        Try
            Using objectContext As SchoolDataLibContainer = 
                                       New SchoolDataLibContainer ()
                ' Display departments and administrators.
                For Each dept As Department In objectContext.Departments
                    Console.WriteLine("School: {0} Budget: {1}", _
                            dept.Name, dept.Budget)

                    ' Load associated contact reference if any.
                    dept.AdministratorReference.Load()
                    If dept.Administrator IsNot Nothing Then
                        Console.WriteLine("Administrator: {0} {1}", _
                            dept.Administrator.FirstName, _
                            dept.Administrator.LastName)
                    End If
                Next

                For Each eDept As DeptEngineering In _
                        objectContext.Departments.OfType(Of DeptEngineering)()
                    Console.WriteLine("{0} LabBudget: {1} FiberOp Budget: {2}", _
                        eDept.Name, eDept.LabBudget.ToString(), _
                        eDept.FiberOpticsBudget.ToString())
                Next

                Dim countDept As Integer = 0
                Dim newDept As DeptEngineering = New DeptEngineering()

                For Each dept As Department In objectContext.Departments
                    countDept = countDept + 1
                Next

                newDept.DepartmentID = countDept + 1
                newDept.Name = "Engineering School " + (countDept + 1).ToString()
                newDept.StartDate = DateTime.Now
                newDept.FiberOpticsBudget = 250000.0
                newDept.LabBudget = 400000.0
                newDept.Budget = newDept.FiberOpticsBudget + newDept.LabBudget

                ' Create new contact item to be 
                ' added as school administrator.
                Dim countPerson As Integer = 0
                For Each pers As Person In objectContext.People
                    countPerson = countPerson + 1
                Next

                Dim newAdmin As Administrator = New Administrator()
                newAdmin.PersonID = countPerson + 1
                newAdmin.FirstName = "Tony"
                newAdmin.LastName = "Allen"
                newAdmin.AdminDate = DateTime.Now - New TimeSpan(2000, 0, 0, 0)

                ' Assign the contact to Administrator property.
                newDept.Administrator = newAdmin

                ' Add admin and school to object context.
                objectContext.AddToPeople("People", newAdmin)
                objectContext.AddToDepartments("Departments", newDept)

                objectContext.SaveChanges()
            End Using

        Catch ex As System.Data.MappingException
            Console.WriteLine(ex.ToString())
        Catch ex As System.Data.CommandExecutionException
            Console.WriteLine(ex.ToString())
        Catch ex As System.Data.UpdateException
            Console.WriteLine(ex.ToString())
        End Try

    End Sub
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using SchoolDataLib;

namespace SchoolDataClient
{
    class Program
    {
        static void Main(string[] args)
        {
            try
            {
                using (SchoolDataLibContainer objectContext =
                                      new SchoolDataLibContainer())
                {
                    DeptEngineering newDept =
                                         new DeptEngineering();

                    int countDept = 
                        objectContext.Departments.Count<Department>();
                    newDept.DepartmentID = countDept + 1;
                    newDept.Name = "Engineering School " +
                                          (countDept + 1).ToString();
                    newDept.StartDate = DateTime.Now;
                    newDept.FiberOpticsBudget = 250000.00M;
                    newDept.LabBudget = 400000.00M;
                    newDept.Budget = newDept.FiberOpticsBudget + 
                        newDept.LabBudget;

                    // Create new contact item to be 
                    // added as school administrator.
                    int countPerson = objectContext.People.Count<Person>();
                    Administrator newAdmin = new Administrator();
                    newAdmin.PersonID = countPerson + 1;
                    newAdmin.FirstName = "Jesper";
                    newAdmin.LastName = "Aaberg";
                    newAdmin.AdminDate = DateTime.Now - 
                                     new TimeSpan(2000, 0, 0, 0);

                    // Assign the contact to Administrator property.
                    newDept.Administrator = newAdmin;

                    // Add admin and school to object context.
                    objectContext.AddToPeople(newAdmin);
                    objectContext.AddToDepartments(newDept);

                    objectContext.SaveChanges();
                }
            }

            catch (System.Data.MappingException e)
            {
                Console.WriteLine(e.ToString());
            }
            
            catch (System.Data.UpdateException e)
            {
                Console.WriteLine(e.ToString());
            }
        }
    }
}

Vea también

Tareas

Cómo definir un modelo con herencia de tabla por tipo (Entity Framework)
Cómo crear y ejecutar consultas de objeto con herencia de tabla por tipo (Entity Framework)