EF 4 унаследованный класс, как запросить мой дочерний класс - PullRequest
1 голос
/ 27 ноября 2010

Как получить IEnumerable результат моего дочернего класса в EF 4. Например, у меня есть 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;
    }

И так далее ...

Но для получения списка или запроса моей коллекции членов или ObjectSet ... у меня нет возможности сделать это.

Я пытаюсь что-то подобное ... но он возвращает мне ноль или исключение приведения.

   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 .. что логически правильно ..

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

Спасибомного для вашего времени!Я ценю!

Cordialy, Julien.

1 Ответ

1 голос
/ 27 ноября 2010
EntitiesContainer db = new EntitiesContainer();
var members = db.Resources.OfType<Member>();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...