0

我使用的是CodeFirst EF6,我想将所有相关的“查询”放到一个类中。使用实体框架在哪里放置DSet DataAccess逻辑?

比方说,我有一个

DbSet<Car> Cars; 
在我的DbContext

我试图创建一个新的类我具体DbSet作为基类:

public class CarRepository : DbSet<Car> 

中,我会找到所有汽车相关业务。

当我用我的DbContext类中的CarRepository替换DbSet时,它不会被填充。 然后我试图从IDbSet派生,但我不知道如何实现所有需要的方法。

有没有另一种方法来实现这个目标而不使用扩展类?

+0

你是什么意思,“当我在我的DbContext类中用CarRepository替换DbSet时,它不会被填充”? – octavioccl

+0

该属性为null。 –

+0

反正这不是个好主意。 'DbSet'应该具有向应用程序提供'IQueryable'的单一责任。使用DbSet的查询应该在包含上下文实例的* services *中进行编程。如果你需要一个查询处理两个(或更多)'DbSet'的查询,那么请考虑一下争议:DbSet应该拥有它? –

回答

0

您可以简单地创建自己的单个类(您的存储库),并将这样的方法。

public class Repository<TEntity> where TEntity : class 
    { 
     private DbContext context; 
     private DbSet<TEntity> dbSet; 
     public Repository(DbContext context) 
     { 
      this.context = context; 
      this.dbSet = context.Set<TEntity>(); 
     } 

     public virtual TEntity GetByID(object id) 
     { 
      return dbSet.Find(id); 
     } 
    } 
相关问题