EntityFrameworkにおけるSQLの直接実行

ちょっぴり落とし穴が。

SELECT
    fo.GroupingItem
  , AVG(fo.AverageItem)
FROM
  FooTable as fo
GROUP BY
  fo.GroupingItem

こんなSQLを発行したとする。 結果セットは

GroupingItem 列名無し
foo 1
bar 2
baz 3

こんな感じになったとする。これをEntityFrameworkでどうにかする場合、

public class Results {
  public string GroupingItem {get;set;}
  public int AverageItem {get;set;}
}

こんなクラスを書いてマッピングする。さて、既にここで落とし穴が! 平均の結果が、マッピングされない。しかも、エラーも何も無しで0が入る(恐らく初期値)。ものすんげぇ悩んだけど、名前が消失するケースでは

SELECT
    fo.GroupingItem
  , AVG(fo.AverageItem) as AverageItem
FROM
  FooTable as fo
GROUP BY
  fo.GroupingItem

この様にちゃんと名前を付け直してあげよう。はぁ。 単に列の順番でマッピングしていって型が合わなければ弾く、とかそんな処理を想像していた。予想以上にちゃんとしてるのね。……なら、エラーぐらいは出して欲しいもんだけども。

ビルド絡みの落とし穴

ある日、突然ブレークポイントが設定出来なくなった。 エラーメッセージは

ブレークポイントを設定できません」

みたいな感じの一文、それだけ。

丸一日近く悩んだ挙げ句、Releaseビルドしてるのに気付いた……。Releaseビルドでは、コンパイル時最適化の内容如何でブレークポイントが設定出来たり出来なかったり設定出来てもおかしな事になる場合があるので気を付けよう。

……って、誰もこんなの引っかからないか。いや、意外と引っかかる人は僕以外にもいるはず。いるよね?