【发布时间】:2010-11-27 00:38:36
【问题描述】:
如何在 EF 4 中获得我的子类的 IEnumerable 结果。就像,我的基类也有一个 ObjectSet 和一个 EntitySet .. 但是对于我的孩子,我无法查询它们.. 试一试错误我成功读取、更新、创建、删除.. 但没有查询(或列出)我的子类..
我是这样读的:
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; }
等等……
但是对于列表或查询我的成员集合或对象集...我没有办法这样做。
我尝试了类似的方法..但它返回 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; }
我也尝试为我的成员创建一个对象集,但他们告诉我我没有这个对象集的任何实体集..它在逻辑上是正确的..
但我在调试中看到我的成员的 DynamicProxies 实例 .. 这个属性具有良好的价值.. 但我不知道如何达到它.. 我可以相信他们没有的 EF 团队考虑一下...我在网上到处搜索..没有成功..我需要专家:)!
非常感谢您的宝贵时间!我很感激!
真诚地, 朱利安。
【问题讨论】:
标签: .net entity-framework ado.net