DapperのSQLプレースホルダをコーディングミスに強くする方法を考える

(追記アリ)
DapperのSQLプレースホルダでコーディングミスをしたので対応策の備忘録です。

文字列でのパラメータ指定が大嫌いなんです

DapperやADO.NETSQL中に"@“から始まる文言を用いることでプレースホルダを表現できます。
例えば下記の例では”@userId"がプレースホルダとなり、"new {userId = 1}“にてパラメータを指定しています。

var sql =
@"
Select
  u.*
From Users as u
Where u.Id = @userId
";

using (var conn = new SqlConnection(connectionstring))
{
  var user = conn.QueryFirstOrDefault<User>(sql, new { userId = 1});
}

今回は、この無名クラスのuserIdをタイポして実行時エラーとなりました。

System.Data.SqlClient.SqlException: 'Must declare the scalar variable "@userId".'

すぐに気が付くようなエラーなので大したことではなかったのですが、やはり実行時エラーは気に入りません。
静的型付言語を使っている以上コンパイル時に最大限エラーを発見したいものです。

続きを読む

Dapperで一対多の関係性をネストされたオブジェクトにマッピングする

Dapperを用いて一対多の関係をマッピングする方法の備忘録です。

データベースのテーブル定義は下記の通りです。

CREATE TABLE [dbo].[Users]
(
  [Id] INT NOT NULL PRIMARY KEY, 
  [Name] NVARCHAR(64) NULL
)

CREATE TABLE [dbo].[TodoItems]
(
  [Id] INT NOT NULL PRIMARY KEY, 
  [Title] NVARCHAR(64) NOT NULL, 
  [Done] BIT NOT NULL, 
  [UserId] INT NOT NULL
)
続きを読む

.NET Core のバージョニングが分かりにくいので調べた

.NET Coreのバージョニング分かりにくい

一生懸命調べました。

続きを読む

2016年12月 最近買ってよかった物まとめ

冗談でバスローブを買った

続きを読む

ASP.NET Core MVC にて、Entity Frameworkを使わずにASP.NET Identityを利用する Part.2

前回のあらすじ

IUserStoreが必要やで。

mrgchr.hatenablog.com

続きを読む

ASP.NET Core MVC にて、Entity Frameworkを使わずにASP.NET Identityを利用する Part.1

前回までのあらすじ

準備をした!

mrgchr.hatenablog.com

続きを読む

クロストレーナーを買った。2016年11月 最近買ってよかった物

いけない!クロストレーナーの事をすっかり忘れていた!

twitter.com

続きを読む