2010-11-27 5 views
1

Comment avoir un résultat IEnumerable de ma classe enfant dans EF 4. Comme, j'ai un ObjectSet pour ma classe de base un EntitySet trop .. mais pour mon enfant, je n'ai aucun moyen pour les interroger .. Whit certains tentent une erreur que je parviens à lire, Mise à jour, créer, supprimer .. mais pas à interroger (ou liste) ma classe enfant ..EF 4 hérité classe comment interroger ma classe enfant

Je lirait comme suit:

public Member GetMember(Guid id) 
    { 
     try 
     { 
      using (EntitiesContainer db = new EntitiesContainer()) 
      { 
       return db.Resources.SingleOrDefault(x => x.Id == id) as Member; 
      } 
     } 
     catch (Exception ex) 
     { 
      Log entry = new Log(); 
      entry.ClassName = GetType().Name; 
      entry.Message = ex.Message; 
      entry.MethodName = System.Reflection.MethodBase.GetCurrentMethod().Name; 
      entry.StackTrace = ex.StackTrace; 
      _logger.Log(entry, SeverityEnum.Critical); 
     } 

     return new Member(); 
    } 

I Créer comme ceci:

public Member CreateMember(Member member, string userName) 
    { 
     try 
     { 
      using (EntitiesContainer db = new EntitiesContainer()) 
      { 
       member.Id = (Guid)_userService.GetUser(userName).ProviderUserKey; 

       db.Resources.AddObject(member); 

       db.SaveChanges(); 
      } 
     } 
     catch (Exception ex) 
     { 
      Log entry = new Log(); 
      entry.ClassName = GetType().Name; 
      entry.Message = ex.Message; 
      entry.MethodName = System.Reflection.MethodBase.GetCurrentMethod().Name; 
      entry.StackTrace = ex.StackTrace; 
      _logger.Log(entry, SeverityEnum.Critical); 
     } 

     return member; 
    } 

I Mise à jour comme celui-ci:

public Member UpdateMember(Member member) 
    { 
     try 
     { 
      using (EntitiesContainer db = new EntitiesContainer()) 
      { 
       db.Resources.Attach(GetMember(member.Id)); 

       db.Resources.ApplyCurrentValues(member); 

       db.SaveChanges(); 
      } 
     } 
     catch (Exception ex) 
     { 
      Log entry = new Log(); 
      entry.ClassName = GetType().Name; 
      entry.Message = ex.Message; 
      entry.MethodName = System.Reflection.MethodBase.GetCurrentMethod().Name; 
      entry.StackTrace = ex.StackTrace; 
      _logger.Log(entry, SeverityEnum.Critical); 
     } 

     return member; 
    } 

Et ainsi de suite ...

Mais pour la liste ou interroger mes membres collection ou ObjectSet ... Je aucun moyen de le faire.

J'essaie quelque chose comme ça .. mais il me renvoie null ou une exception de casting.

public IEnumerable<Member> GetAll() 
    { 
     try 
     { 
      using (EntitiesContainer db = new EntitiesContainer()) 
      { 
       var test = db.Resources.ToList() as IList<Member>; 

       // OR 

       var test = db.Resources as IEnumerable<Member>; 

       // OR 

       var test = db.Resources.Cast<Member>(); 

       // OR 

       var test = db.Resources.AsEnumerable<Member>();  

       return test; 
      } 
     } 
     catch (System.Exception ex) 
     { 
      Log entry = new Log(); 
      entry.ClassName = GetType().Name; 
      entry.Message = ex.Message; 
      entry.MethodName = System.Reflection.MethodBase.GetCurrentMethod().Name; 
      entry.StackTrace = ex.StackTrace; 
      _logger.Log(entry, SeverityEnum.Critical); 
     } 

     return null; 
    } 

Je tente de créer une ObjectSet pour mon trop membre, mais ils me jettent que je n'ai pas de EntitySet pour cette ObjectSet .. que son logicly droit ..

Mais je vois dans débogage qu'il existe une instance de DynamicProxies de mon Membre .. une telle propriété est juste avec le bon rapport qualité prix .. mais je ne sais pas comment l'atteindre .. je peux croire que l'équipe EF ils n'ont pas pensé pour ça ... recherche partout dans le net .. pas de succès .. j'ai besoin d'un expert :)!

Merci beaucoup pour votre temps! J'apprécie!

Cordialement, Julien.

Répondre

1
EntitiesContainer db = new EntitiesContainer(); 
var members = db.Resources.OfType<Member>(); 
Questions connexes