2010-11-27 77 views
1

如何在EF 4中获得我的子类的IEnumerable结果。Like,我的基类有一个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(); 
    } 

I Create like this:

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

等等......

但对于列表或查询我的会员集合或对象集...我有没有办法做到这一点。

我尝试类似的东西..但它返回空或铸造异常。

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

我尝试了我的会员创建一个对象集太多,但他们扔我,我没有任何的EntitySet这个对象集..其logicly权利..

但我在看调试我的成员DynamicProxies的一个实例..一个这个属性是正确的与良好的价值..但我不知道如何达到它..我可以相信,EF团队,他们没有想到的......我在网上随处搜索..没有成功..我需要一个专家:)!

非常感谢您的时间!我很感激!

Cordialy, Julien。

回答

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