我正在从 ActiveRecord 切换到 Dapper。我有一个包含几个字段的简单项目类:
- 标识(整数)
- 名称(字符串)
- 秘密(指导)
- OwnerId(指导)
我最初尝试使用 Dapper 导致了以下代码:我正在使用 Dapper,如下所示:
List<Project> projects = new List<Project>();
using (var conn = MvcApplication.GetSqlConnection()) // new connection
{
projects = conn.Query<Project>("SELECT * FROM Projects p WHERE p.OwnerId = (SELECT UserId FROM aspnet_Users WHERE LoweredUserName=@userName)", new { userName = User.Identity.Name.ToLower() }).ToList();
}
return View(projects);
此查询导致DataException: Error parsing column 0 (Id=11 - Int16)
. 内部异常是InvalidCastException: Specified cast is not valid.
由于 Dapper 使用页面上的示例均未提及SELECT *
,因此我尝试像这样修改我的查询:
projects = conn.Query<Project>("SELECT OwnerId = (SELECT UserId FROM aspnet_Users WHERE LoweredUserName=@userName)", new { userName = User.Identity.Name.ToLower() }).ToList();
当我调试时,虽然我的数据库中有两个项目,但我只得到一个;并且那个名称为 null 。
奇怪的。我究竟做错了什么?我觉得 Dapper 没有正确地将字段(DB)映射到字段(类)。我正在使用最新的 NuGet 版本。