Julien
Julien

Reputation: 121

EF 4 inherited class how to query my child class

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

Answers (1)

Vincent BOUZON
Vincent BOUZON

Reputation: 177

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

Upvotes: 1

Related Questions