Partager via


Procédure : ajouter et modifier des objets avec l'héritage TPH (table par hiérarchie) (Entity Framework)

Cet exemple utilise le modèle EDM (Entity Data Model) conçu dans la rubrique Procédure : définir un modèle avec l'héritage TPH (table par hiérarchie) (Entity Framework).

Pour créer un projet à l'aide du modèle d'héritage TPH (table par hiérarchie)

  1. Créez un projet d'application console et ajoutez des références à System.Data.Entity et à System.Runtime.Serialization.

  2. Ajoutez une référence à la DLL générée à partir du modèle d'héritage de la rubrique Procédure : définir un modèle avec l'héritage TPH (table par hiérarchie) (Entity Framework).

  3. Ajoutez les schémas de la rubrique Procédure : définir un modèle avec l'héritage TPH (table par hiérarchie) (Entity Framework) au dossier dans lequel se trouve l'exécutable SchoolDataClient.

  4. Ajoutez un fichier de configuration d'application avec le contenu illustré dans l'exemple ci-dessous.

    <?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>
    

Pour ajouter les nouveaux types dérivés Instructor et Student et modifier le type Instructor

  1. Instanciez le contexte d'objet SchoolDataEntities.

  2. Créez une nouvelle instance du type Instructor et assignez des données aux propriétés du type Instructor.

  3. Ajoutez la nouvelle instance du type Instructor au stockage à l'aide de la méthode AddToPeople. Le paramètre de la méthode AddToPeople est le nom de la nouvelle instance de Instructor.

  4. Enregistrez les modifications.

  5. Créez une nouvelle instance du type Student et initialisez les propriétés.

  6. Ajoutez au stockage et enregistrez les modifications.

  7. Créez un ObjectParameter à utiliser dans une requête pour une instance Instructor avec la propriété LastName affectée de la valeur Griffin.

  8. Testez la requête pour vérifier que l'Instructor avec cette propriété existe dans le stockage.

  9. Exécutez une requête pour rechercher l'Instructor désigné et l'assigner à une variable nommée changeInstructor.

  10. Assignez la propriété LastName à Anderson et enregistrez les modifications.

Exemple

Le code suivant ajoute une nouvelle instance du type Instructor et du type Student. Ensuite, il exécute une requête pour rechercher un Instructor avec une propriété LastName ayant la valeur Griffin et affecte la valeur Anderson à LastName.

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(newAdmin)
                objectContext.AddToDepartments(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
End Module
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using SchoolDataLibTPH;
using System.Data.Objects;
namespace SchoolDataLib
{
    class Program
    {
        static void Main(string[] args)
        {
            try
            {
                // Add new Instructor.
                using (SchoolDataLibContainer objectContext =
                                      new SchoolDataLibContainer())
                {
                    Instructor newInstructor =
                        new Instructor();
                    newInstructor.PersonID =
                            objectContext.People.Count<Person>() + 1;
                    newInstructor.FirstName = "Satomi";
                    newInstructor.LastName = "Hayakawa";

                    newInstructor.HireDate = DateTime.Now;

                    objectContext.AddToPeople(newInstructor);
                    objectContext.SaveChanges();

                    // Add new Student.
                    Student newStudent = new Student();
                    int count = objectContext.People.Count<Person>();
                    newStudent.PersonID = count + 1;
                    newStudent.FirstName = "Uzi";
                    newStudent.LastName = "Hefetz";
                    newStudent.EnrollmentDate = DateTime.Now;


                    objectContext.AddToPeople(newStudent);
                    objectContext.SaveChanges();

                    // Change the last name of an instructor.
                    ObjectParameter param =
                                  new ObjectParameter("p", "Hayakawa");
                    if (0 != objectContext.People.OfType<Instructor>().
                                  Where("it.LastName = @p",
                                  param).Count<Instructor>())
                    {
                        Instructor changeInstructor = 
                              objectContext.People.
                              OfType<Instructor>().Where(
                             "it.LastName = @p", param).First();
                        changeInstructor.LastName = "Anderson";
                        objectContext.SaveChanges();

                    }

                    objectContext.Connection.Close();
                }
            }

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

        }
    }
}

Voir aussi

Tâches

Procédure : définir un modèle avec l'héritage TPH (table par hiérarchie) (Entity Framework)
Procédure : créer et exécuter des requêtes d'objet à l'aide de l'héritage TPH (table par hiérarchie) (Entity Framework)