none
Entity Framework problème de mappage dans un héritage

    Question

  • Bonjour,

    J'execute un tutoriel sur Entity framework(EF), telechargeable sur le net, et qui porte sur la Scolarité du Contoso University, premier lien:1er lien.

    Je l'ai executé jusqu'a la page 167, lors des tests où j'ai un problème de mappage avec un héritage. Les entités Student et Instructor heritent de l'entité Person. Après avoir fait les references necessaires; Il est impossible d'instancier les dérivées de la classe Person. Une capture de l'écran en pièce jointe:

    Prière de m'aider à corriger cette erreur.



    mardi 12 novembre 2013 13:47

Réponses

Toutes les réponses

  • Bonjour,

    N'avez vous pas d'autres messages d'erreurs ?

    Avez vous regardé le code généré ? Est-ce que les classes Inspector et Person sont bien générées ?

    Cordialement


    Gilles TOURREAU - MVP C#
    Architecte logiciel/Consultant/Formateur Freelance - P.O.S Informatique
    Blog : http://gilles.tourreau.fr - Suivez-moi sur Twitter
    - MCPD : Enterprise Developper / Windows Developper 3.5 / ASP .NET 3.5/4.0
    - MCSA : SQL Server 2012
    - MCITP : SQL Server 2008 Developper
    - MCTS : ADO .NET 3.5 / SQL Server 2008 Developper / Windows Forms 3.5 / ASP .NET 3.5/4.0 / TFS 2010 / Windows Azure

    mardi 12 novembre 2013 23:20
  • Bonjour,

    Comme message d'erreur, j'ai ceci:

    Erreur	1	Impossible de convertir implicitement le type 'ContosoUniversity.Instructor' en 'ContosoUniversity.DAL.Person'	D:\WebSites\ContosoUniversity.Tests\ContosoUniversity.Tests\UnitTest1.cs	28	26	ContosoUniversity.Tests
    

    Erreur	2	'ContosoUniversity.Instructor' ne contient pas de définition pour 'LastName'	D:\WebSites\ContosoUniversity.Tests\ContosoUniversity.Tests\UnitTest1.cs	28	68	ContosoUniversity.Tests
    

    Et lorsque je remplace, instructor par Student, ça passe sans problème (les 2 héritant de l'entité de base Person). Je ne sais si omis une instanciation, alors que j'ai suivi le tuto à la lettre, (tuto telechargeable sur ce lien:EF.(1er lien). je suis bloqué à la page 167.

    Merci d'avance.

    mercredi 13 novembre 2013 08:41
  • Bonjour

    Veuillez verifier si vous avez bien inclus les assembly:

    using ContosoUniversity.BLL;
    using ContosoUniversity.DAL; 

    Si vous allez avec le curseur sur  Instructor dans Person = new Instructor (.....).
    Avec un F12 Visual Studio vas vous afficher la définition de la classe.
    Pouvez-vous la partager avec nous?

    Merci!

    Cordialement,


    Aurel BERA, MSFT
    MSDN Community Support. LE CONTENU EST FOURNI "TEL QUEL" SANS GARANTIE D'AUCUNE SORTE, EXPLICITE OU IMPLICITE.
    S'il vous plaît n'oubliez pas de "Marquer comme réponse" les réponses qui ont résolu votre problème. C'est une voie commune pour reconnaître ceux qui vous ont aidé, et rend plus facile pour les autres visiteurs de trouver plus tard la résolution.


    mercredi 13 novembre 2013 14:35
  • Bonsoir,

    Voici la classe en question: j'ai pu référence la BLL et la DAL, mais l'erreur persiste toujours.

    using System;
    using System.Text;
    using System.Collections.Generic;
    using System.Linq;
    using Microsoft.VisualStudio.TestTools.UnitTesting;
    using ContosoUniversity;
    using ContosoUniversity.BLL;
    using ContosoUniversity.DAL;
    
    namespace ContosoUniversity.Tests
    {
        /// <summary>
        /// Description résumée pour UnitTest1
        /// </summary>
        [TestClass]
        public class UnitTest1
        {
            private SchoolBL CreateSchoolBL ()
            {
                var SchoolRepository = new MockSchoolRepository();
                var SchoolBL = new SchoolBL(SchoolRepository);
    
                SchoolBL.InsertDepartment(new Department()
                {
                    Name = "First Department",
                    DepartmentID = 0,
                    Administrator = 1,
                    Person = new Instructor() {FirstMidName="Admin", LastName="One" }
    
                });
    
                SchoolBL.InsertDepartment(new Department()
                {
                    Name = "Second Department",
                    DepartmentID = 1,
                    Administrator = 2,
                    Person = new Instructor() { FirstMidName = "Admin", LastName = "Two" }
                });
    
                SchoolBL.InsertDepartment( new Department (){ Name = "Second Department",
                    DepartmentID = 2,
                    Administrator = 3,
                    Person = new Instructor() { FirstMidName = "Admin", LastName = "Three" }
    
            });
    
                return SchoolBL;
            }
    
            private TestContext testContextInstance;
    
            /// <summary>
            ///Obtient ou définit le contexte de test qui fournit
            ///des informations sur la série de tests active ainsi que ses fonctionnalités.
            ///</summary>
            public TestContext TestContext
            {
                get
                {
                    return testContextInstance;
                }
                set
                {
                    testContextInstance = value;
                }
            }
    
            #region Attributs de tests supplémentaires
            //
            // Vous pouvez utiliser les attributs supplémentaires suivants lorsque vous écrivez vos tests :
            //
            // Utilisez ClassInitialize pour exécuter du code avant d'exécuter le premier test de la classe
            // [ClassInitialize()]
            // public static void MyClassInitialize(TestContext testContext) { }
            //
            // Utilisez ClassCleanup pour exécuter du code une fois que tous les tests d'une classe ont été exécutés
            // [ClassCleanup()]
            // public static void MyClassCleanup() { }
            //
            // Utilisez TestInitialize pour exécuter du code avant d'exécuter chaque test 
            // [TestInitialize()]
            // public void MyTestInitialize() { }
            //
            // Utilisez TestCleanup pour exécuter du code après que chaque test a été exécuté
            // [TestCleanup()]
            // public void MyTestCleanup() { }
            //
            #endregion
    
            [TestMethod]
            public void TestMethod1()
            {
                //
                // TODO: ajoutez ici la logique du test
                //
            }
        }
    }
    


    mercredi 13 novembre 2013 14:51
  • Le problème est posée par la classe Instructor donc c'est sa definition qui nous intéresse.

    Cordialement,



    Aurel BERA, MSFT
    MSDN Community Support. LE CONTENU EST FOURNI "TEL QUEL" SANS GARANTIE D'AUCUNE SORTE, EXPLICITE OU IMPLICITE.
    S'il vous plaît n'oubliez pas de "Marquer comme réponse" les réponses qui ont résolu votre problème. C'est une voie commune pour reconnaître ceux qui vous ont aidé, et rend plus facile pour les autres visiteurs de trouver plus tard la résolution.


    mercredi 13 novembre 2013 14:55
  • Il est impossible d'atteindre la définition de cette classe (voir capture). En survolant le nom de la classe, j'ai ceci :
    Instructor.Instructor()


    mercredi 13 novembre 2013 15:39
  • Faites une recherché sur le mot "Instructor" dans le projet entier et vérifiez ou vous avez des définitions des classes avec ce nom.

    Je soupçonne que vous avez plusieurs définitions pour une classe Instructor.

    Cordialement,


    Aurel BERA, MSFT
    MSDN Community Support. LE CONTENU EST FOURNI "TEL QUEL" SANS GARANTIE D'AUCUNE SORTE, EXPLICITE OU IMPLICITE.
    S'il vous plaît n'oubliez pas de "Marquer comme réponse" les réponses qui ont résolu votre problème. C'est une voie commune pour reconnaître ceux qui vous ont aidé, et rend plus facile pour les autres visiteurs de trouver plus tard la résolution.

    jeudi 14 novembre 2013 09:26
  • Bonjour,

    Finalement, j'ai pu résoudre le problème en l'appelant avec son Namespace comme suit:

    ContosoUniversity.DAL.Instructor()
    Puisque c'est l'entité était invisible depuis le modèle. Merci pour vos contributions.
    dimanche 17 novembre 2013 09:14