2010-01-11 7 views
0

J'ai fait une fonction de sauvegarde générique pour EF:problème EF 4.0 ajouter objet au contexte

public void Save(T entity) 
    { 
     using (C context = new C()) 
     { 
      string entitySetName = context.FindEntitySetByEntity<T>(); 

      T entityInDDBB = GetEntityByKey(entity, entitySetName, context); 

      //if we didn't find the entity in database make an insert, if not an update. 
      if (entityInDDBB == null) 
      { 

       **context.AddObject(entitySetName, entity);** 
      } 
      else 
      { 
       context.ApplyCurrentValues(entitySetName, entity); 
      } 

      context.SaveChanges(); 
     } 
    } 

Le problème est que si nous adoptons un type dérivé à AddObject (fe: enseignant), mais la mise en correspondance attend personne il jette une erreur.

Comment est-ce que je pourrais changer le type à l'objet (je suppose que c'est impossible sans créer un nouveau) ou connaissez-vous une autre manière de le faire fonctionner?

Cordialement.

+0

Quel est le message d'erreur que vous obtenez? –

Répondre

2

Bien EF ne vous permet pas de traiter une classe CLR comme une autre.

En d'autres termes, vous ne pouvez pas traiter le Maître comme une personne.

Étant donné cette limitation, Maître doit être une Entité aussi, sinon cela échouera toujours. Mais à partir de votre description, il semble que vous n'ayez pas d'Entité Enseignante ou d'informations de mappage pour Enseignant?

Malheureusement, il n'y a pas moyen de contourner cela.

Alex

REMARQUE: votre code devrait fonctionner correctement si vous avez une entité enseignant et les correspondances et si FindEntitySetByEntity<Teacher>() renvoie les mêmes que FindEntitySetByEntity<Person>().

Questions connexes