如何使用依赖注入在Entity框架中执行具有多个模型的查询

时间:2011-12-27 12:29:35

标签: asp.net-mvc-3 dependency-injection entity-framework-4.1

我尝试在我的MVC应用程序中使用依赖注入和实体框架。在项目中,我为CRUD操作定义了Generic Repository类。每个模型对象都有具体的服务类。 Presentation层中的我的控制器使用具体的服务层类来从数据库中获取数据。这些具体类依次调用RepositoryClass方法来实现对数据库的实际操作。

下面是类定义的示例(为简单起见,我删除了各种接口的详细信息和一些方法的实现):

class RepositoryBase<T>
{    
  Add(T entity) {...}
  Update (T entity) {...}    
  Delete (T entity) {...}   
  T GetById(int id) {...}     
  IEnumerable<T> GetAll() 
  {dbContext.ToList();} 
 }

 public class CarsService  {
    public IEnumerable<Cars> GetCars()
    {  
       var cars = RepositoryBase<Cars>.GetAll();
        return cars;  
    }
    public Car GetCar(int id)
    {            
       var car = RepositoryBase<T>.GetById(id);              
       return car;         
    }
  }

 Public class DealerService {...}

只要我在应用程序中一次处理1个对象类型,所有这一切都很有效。但我不确定如何在服务类中进行更改以获取多个实体(即汽车和经销商)的数据。请注意在我的场景中,虽然我在汽车模型中定义了经销商ID,但缺少导航属性。所以我必须使用linq查询加入汽车和经销商。

请帮助确定需要修改的正确类(层)。我发现的所有例子一次只讨论一个实体。

1 个答案:

答案 0 :(得分:0)

DbContext.Set()。包括()首先你把配置映射用于修复,
第二,如果您不想使用导航属性,可以使用

RepositoryBase<Cars>.GetEntitySet<Cars>.Include("Dealers") //this does join if you key to join

但在这种情况下你应该使用
添加到RepositoryBase<T>属性

public ISet<T> GetEntitySet<T>(string table2Include)
{
   return DbContext.Set<T>()
}