【问题标题】:EF 4 inherited class how to query my child classEF 4继承类如何查询我的子类
【发布时间】: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


    【解决方案1】:
    EntitiesContainer db = new EntitiesContainer();
    var members = db.Resources.OfType<Member>();
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-04-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-03-06
      • 1970-01-01
      相关资源
      最近更新 更多