ActiveRecord から Dapper に切り替えています。いくつかのフィールドを持つ単純な Project クラスがあります。
- ID (整数)
- 名前 (文字列)
- シークレット (ガイド)
- 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();
デバッグすると、DB に 2 つのプロジェクトがありますが、返されるのは 1 つだけです。その名前には null があります。
変。私は何を間違っていますか?Dapper がフィールド (DB) をフィールド (クラス) に適切にマッピングしていないように感じます。最新の NuGet バージョンを使用しています。