我尝试在我的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查询加入汽车和经销商。
请帮助确定需要修改的正确类(层)。我发现的所有例子一次只讨论一个实体。
答案 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>()
}