【发布时间】:2018-05-26 13:04:02
【问题描述】:
我正在尝试使用 dapper 的 Multimapping 功能来返回 MenuCategories 和相关菜单的列表。但我收到以下错误:-
使用多映射 API 时,请确保设置 splitOn 参数,如果 您有除 Id 以外的密钥
这是我的课程:-
VMMenuCategory.cs
public class VMMenuCategory
{
public int MenuCategoryID { get; set; }
public string CategoryName { get; set; }
public System.DateTime CreatedOn { get; set; }
public DateTime? UpdatedOn { get; set; }
public List<VMMenu> Menus { get; set; }
}
VMMenus.cs
public class VMMenu
{
public int MenuID { get; set; }
public int MenuCategoryID { get; set; }
public string ProductName { get; set; }
public int? CostPrice { get; set; }
public int? SellingPrice { get; set; }
public System.DateTime CreatedOn { get; set; }
public DateTime? UpdatedOn { get; set; }
}
MenuCategoriesRepository.cs
public sealed class MenuCategoryRepository : Connection, IMenuCategoryRepository
{
List<VMMenuCategory> IMenuCategoryRepository.GetAllMenuCategories()
{
List<VMMenuCategory> _lstVMMenuCategory = new List<VMMenuCategory>();
string query = "select * from [dbo].[MenuCategories]";
using (var connection = GetConnection())
{
var data = connection.Query<VMMenuCategory, VMMenu, VMMenuCategory>(query, map:(mc,m) => { mc.Menus =new List<VMMenu>() ;return mc; },splitOn: "MenuID").ToList();
return data;
}
//return _lstVMMenuCategory;
}
}
【问题讨论】:
-
看起来
[dbo].[MenuCategories]表没有MenuID列。 -
@DmitryEgorov,是的,它是一个子表。我试过
splitOn: "MenuCategoryID",但我得到了同样的错误。 -
那么你需要在这个查询中加入两个表。
-
@DmitryEgorov,所以没有加入就没有办法做到这一点。作为实体框架在 ORM 中工作?
-
恐怕不行。 Dapper 不知道在哪里可以找到
VMMenu的数据,除非您在查询中告诉它。