Dapperがフィールドにデータを設定して例外をスローしない

asp.net-mvc-3 dapper

質問

私はActiveRecordからDapperに切り替えています。私はいくつかのフィールドを持つ単純なプロジェクトクラスを持っています:

  • Id(int)
  • 名前(文字列)
  • 秘密(guid)
  • OwnerId(guid)

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)発生しました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バージョンを使用しています。

受け入れられた回答

あなたが見ている違いは、次の(1.12?)リリースの重要な機能です。歴史的に、dapperはデータが完全一致でなければならないと非常に戸惑っていました。例えば、データはdoubleですが、フィールド/プロパティはfloat、データはlong、フィールド/プロパティはint 。保留中のバージョンでは、これを検出し、生成されたILの一部として補償する余分なコードがあります(Convert.ChangeType経由ではありません - 遅すぎます)。

この変更の主要な要因の1つは、一部のデータベースがかなり単純な値を非常に異なる方法で返していることです。一部のデータベースのユーザーがその型をマップすることは、しばしば問題になりました。

Tl; dr:新機能があなたのために機能することをうれしく思っています。すぐにリリースされるはずです。


人気のある回答

DapperはSQLの結果をマップするだけなので、マップするテーブルから選択する必要があります。

List<Project> projects = new List<Project>();
using (var conn = MvcApplication.GetSqlConnection()) // new connection
{
    projects = conn.Query<Project>("SELECT * FROM Projects Where OwnerId = (SELECT UserId FROM aspnet_Users WHERE LoweredUserName=@userName)", new { userName = User.Identity.Name.ToLower() }).ToList();
}
return View(projects);

Si



ライセンスを受けた: CC-BY-SA with attribution
所属していない Stack Overflow
このKBは合法ですか? はい、理由を学ぶ
ライセンスを受けた: CC-BY-SA with attribution
所属していない Stack Overflow
このKBは合法ですか? はい、理由を学ぶ