2010-11-27 3 views
1

Wie ein IEnumerable Ergebnis meiner untergeordneten Klasse in EF 4. Wie ich habe ein ObjectSet für meine Basisklasse ein EntitySet auch .. aber für mein Kind habe ich keine Möglichkeit sie abfragen .. Whit einige versuchen, einen Fehler, den ich erfolgreich sein zu lesen, zu aktualisieren, erstellen, löschen .. aber nicht abfragen (oder Liste) mein Kind Klasse ..EF 4 geerbte Klasse, wie meine Kindklasse abzufragen

ich so lesen:

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(); 
    } 

Ich erstelle so:

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; 
    } 

Ich mag dieses Update:

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; 
    } 

Und so weiter ...

Aber für Liste oder Abfrage meine Mitglieder Sammlung oder ObjectSet ... Ich habe keine Möglichkeit, dies zu tun.

Ich versuche so etwas .. aber es gibt mir null oder eine Casting-Ausnahme.

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; 
    } 

Ich versuche auch eine ObjectSet für mein Mitglied zu schaffen, aber sie werfen mir, dass ich jede EntitySet für dieses ObjectSet nicht hat .., dass sein logicly richtig ..

Aber ich sehe in Debuggen, dass es eine Instanz von DynamicProxies des my Member .. eine dieser Eigenschaften ist richtig mit dem guten Wert .. aber ich weiß nicht, wie man es erreicht .. Ich kann glauben, dass EF-Team sie nicht für das ... Ich suche überall im netz .. kein erfolg .. ich brauche einen experten :)!

Vielen Dank für Ihre Zeit! Ich schätze!

Cordialy, Julien.

Antwort

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