目前我的存储库包含以下代码:
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 模型?