2010-11-27 5 views
1

Как получить IEnumerable результат моего дочернего класса в EF 4. Как и у меня есть ObjectSet для моего базового класса EntitySet тоже .. но для моего ребенка у меня нет способа запросить их .. Уит некоторые пытаются ошибку мне удается читать, обновление, создание, удаление .. но не запрашивать (или список) мой класс ребенок ..EF 4 унаследованный класс, как запросить мой дочерний класс

Читаю, как это:

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

Я создаю вот так:

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

Я обновляю так:

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

и так далее ...

Но для списка или запросить мой Члены коллекции или ObjectSet ... У меня есть нет способа сделать это.

Я пробую что-то вроде этого .. но он возвращает мне null или исключение кастинга.

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

Пытаюсь создать ObjectSet для моего члена тоже, но они бросают меня, что я не имею никакого EntitySet для этого ObjectSet .. что его logicly право ..

Но я вижу в отлаживая, что есть экземпляр DynamicProxies моего члена .. эти свойства правы с хорошим значением .. но я не знаю, как его достичь .. Я могу поверить, что команда EF они не думают для этого ... I искать везде в сети .. нет sucess .. Мне нужен эксперт :)!

Большое спасибо за ваше время! Я ценю!

Cordialy, Julien.

ответ

1
EntitiesContainer db = new EntitiesContainer(); 
var members = db.Resources.OfType<Member>(); 
Смежные вопросы