Reputation: 121
How to have an IEnumerable result of my child class in EF 4. Like, I have an ObjectSet for my base class an EntitySet too .. but for my child I have no way to query them .. Whit some try an error I succeed to Read, Update, Create, Delete .. but not to query (or list) my child class..
I Read like this :
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; }
I Update like this :
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; }
And so on...
But for list or query my Members Collection or ObjectSet ... I have no way for doing this.
I try something like that .. but it return me null or a casting exception.
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; }
I Try to create an ObjectSet for my Member too but they throw me that i dont have any EntitySet for this ObjectSet .. that its logicly right ..
But I see in debugging that there an instance of DynamicProxies of the my Member .. an this properties is right with the good value .. but i dont know how to reach it .. I can believe that EF team they have not think for that ... I search everywhere in the net .. no sucess .. I need an expert :) !
Thank you a lot for your time! I appreciate!
Cordialy, Julien.
Upvotes: 1
Views: 256
Reputation: 177
EntitiesContainer db = new EntitiesContainer();
var members = db.Resources.OfType<Member>();
Upvotes: 1