【发布时间】:2017-04-04 05:44:38
【问题描述】:
我有一个带有通用 Get 方法的基础存储库,可以像使用 Dapper 一样返回数据
public T Get<T>(Func<IDbConnection, T> query)
{
using (IDbConnection db = new SqlConnection(ConfigurationManager.ConnectionStrings["myDB"].ConnectionString))
{
return query.Invoke(db);
}
}
但是我现在需要返回多个数据。 DAL查询如下:
var multi = db.QueryMultiple(getCarDataSp , new { CustomerID = customerId, Year = year },
commandType: CommandType.StoredProcedure));
var cars = multi.Read<CarDTO>();
var options = multi.Read<CarOptionDTO>();
//wire the options to the cars
foreach(var car in cars){
var carOptions = options.Where(w=>w.Car.CarID == car.CarID); //I would override Equals in general so you can write w.Car.Equals(car)...do this on a common DataModel class
car.Options = carOptions.ToList();
}
是否有可能在我的 BaseRepository 中有一个 Generic GetMultiple 或者将 get multi 包装在我的 Get 方法中,然后在其中的汽车和选项有自己单独的 Get 调用?
【问题讨论】:
-
随着您的用例变得越来越复杂,解决方案变得越来越不常用。我不建议将这样的东西放在 BaseRepository 类中。如果您打算这样做,您需要几个用例才能正确构建它。
-
是的,我认为类似。在那一刻,我将该方法的实现分开而不是基本存储库,并认为它符合我的需求。干杯
-
这段代码增加了什么价值?只是连接字符串的选择。并且它将整个 Dapper 表面简化为 Query 调用。这很聪明,但我认为这不是一个好主意。