我有一个相对较大的.NET Core应用程序。我使用Entity Framework和AutoMapper将数据库模型转换为应用程序模型。为此,我使用.ProjectTo<T>()
,因此不必做很多.Include()
。
我最近修改了许多模型,因此该应用程序使用应用程序模型而不是数据库模型。原因有很多,但这并不重要。在更改大约30或40个文件的过程中,我偶然发现了一个错误,该错误现已尝试修复了几个小时。
发生问题是因为我在一个模型上使用.ProjectTo<T>()
,该模型有很多其他模型,其中也有很多模型。让我这样说:如果我要使用.Include()
,则至少需要10个,才能产生与.ProjectTo<T>()
相同的结果。
这是我的用法示例:
public class CarController : Controller {
private readonly ICarContext _dbContext;
public CarController(ICarController dbContext) {
_dbContext = dbContext;
}
public async Task<CarModel> GetCar(Guid id) {
return await _dbContext
.Cars // of type Car
.Where(x => x.Id == id)
.ProjectTo<CarModel> // project from Car to CarModel
.FirstOrDefault();
}
}
我得到的错误是:
System.ArgumentException:参数类型不匹配
AutoMapper不会确切告诉我问题出在哪里,所以我只能浏览所有30-40个文件并查找问题。
是否可以告诉AutoMapper显示详细的错误,所以我确切地知道从<Car>
到<CarModel>
的转换在哪里?