0

目前我的存储库包含以下代码:

public interface IRepository<T> where T : class
{
    T Get(int id);
    IQueryable<T> GetAll();
    IQueryable<T> Where(Expression<Func<T, bool>> predicate);
    IQueryable<T> Query();
    void Add(T entity);
    void Remove(T entity);
    void Save();
}

public class Repository<T> : IRepository<T> where T : class
    {
        private readonly IContextProvider  _ctxProvider;
        protected BaseModelContext _ctx
        {
            get
            {
                return _ctxProvider.DataContext;
            }
        }

        public Repository(IContextProvider ctx)
        {
            _ctxProvider = ctx;
        }

        public T Get(int id)
        {
            return _ctx.Set<T>().Find(id);
        }

        public IQueryable<T> GetAll()
        {
            return _ctx.Set<T>();
        }

        public IQueryable<T> Where(Expression<Func<T, bool>> predicate)
        {
            return _ctx.Set<T>().Where(predicate);
        }

        public void Add(T entity)
        {
            _ctx.Set<T>().Add(entity);
        }

        public void Remove(T entity)
        {            
            _ctx.Set<T>().Remove(entity);
        }

        public IQueryable<T> Query()
        {
            return _ctx.Set<T>().AsQueryable();
        }

        public IQueryable<T> Eager(string path)
        {
            return _ctx.Set<T>().Include(path);
        }

        public void Save()
        {
            _ctx.SaveChanges();
        }
    }

我已经从数据库创建了我的 EDMX 模型,但是我注意到您将在哪里使用 _ctx.Set 来针对每个类模式的代码优先表进行模板化,Set() 方法在由创建的实体上不可用生成的 .edmx 文件。我原以为 EF 可以很容易地在这两种类型之间切换。我是否必须重新编写我的存储库类才能使用 EDMX 模型?

4

1 回答 1

0

默认情况下,模型优先和数据库优先方法 VS2010 生成基于 ObjectContext 的上下文和基于 EntityObject 的实体。这在 VS2012 中发生了变化,默认情况下将生成 POCO 实体和基于 DbContext 的上下文。CodeFirst 使用 POCO 实体和基于 DbContext 的上下文,符合 VS2012 但不符合 VS2010。然而,即使使用 VS2010,您也可以生成 DbContext 和 POCO 实体。首先,右键单击设计器表面并在属性中将代码生成策略从默认更改为无。然后右键单击您的项目并“添加新项目”。点击左侧的“在线”。您可以在搜索对话框中键入 DbContext。选择“EF 4.x DbContext Generator for C#”。这会将 T4 模板添加到您的项目中,该模板将从您的 edmx 文件生成基于 DbContext 的上下文和 POCO 实体。

于 2012-12-29T19:37:45.597 回答