【问题标题】:Getting related tables entity framework using repository pattern使用存储库模式获取相关表实体框架
【发布时间】:2013-09-21 03:14:01
【问题描述】:

我的数据库中有这两个表,并且正在为这个示例使用实体框架

我定义了以下 IRepository 接口

public interface IRepository<T> where T:class
    {
        void Add(T entity);
        void Update(T entity);
        void Delete(T entity);
        IQueryable<T> GetAll();
        T Find(int id);
    }


 public class LINQRepository<T> : IRepository<T> where T: class
    {

        protected DbSet DbSet;


        public LINQRepository(DbContext context)
        {
            DbSet = context.Set<T>();

        }

        void IRepository<T>.Add(T entity)
        {
            DbSet.Add(entity);
        }

        void IRepository<T>.Update(T entity)
        {
            DbSet.Attach(entity);
        }

        void IRepository<T>.Delete(T entity)
        {
            DbSet.Remove(entity);
        }

        IQueryable<T> IRepository<T>.GetAll()
        {

            return DbSet as IQueryable<T>;
        }


        T IRepository<T>.Find(int id)
        {

            return DbSet.Find(id) as T;

        }


    }

在我的代码中,我正在实例化一个 QuestionsRepository,我还想获得返回的问题列表的所有相关答案。我想知道什么是完成这项工作的好方法?我是否在界面中创建另一个函数,例如GetAllWithChild(String ChildName)?我想有更好的方法来解决这个问题。

【问题讨论】:

  • 在 getAll 方法中,您必须返回 DbSet 并在调用该方法时。您必须使用 Include(扩展方法)。由于延迟执行的优势,您的查询将被触发一次,您将得到任何您想要的......
  • 哦,是的,让我编辑代码。我正在用一个子表测试它
  • 你必须使用类似这样的新 QuestionsRepository().GetAll().Include("Answers").ToList()
  • 你能把你的评论放在答案部分吗?我完全觉得自己像个傻瓜一样发布这个问题,错过了这么一件微不足道的事情:) 感谢您指出。
  • 标记为答案..谢谢

标签: c# asp.net-mvc-4 entity-framework-4.1 repository-pattern


【解决方案1】:

在 getAll 方法中,您必须返回 DbSet 并在调用该方法时。您必须使用 Include(扩展方法)。由于延迟执行的优势,您的查询将被触发一次,您将得到您想要的任何东西..

你必须使用这样的东西

new QuestionsRepository().GetAll().Include("Answers").ToList();

new QuestionsRepository().GetAll().Include(x => x.Answers).ToList();

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-12-11
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多