私は EF に慣れています。なぜなら、EF をよく理解してクエリを最適化する方法を知っている限り、通常は問題なく機能するからです。しかし。
大量のデータを扱うことがわかっている場合、何を選択しますか? そもそも EF を使用してアプリケーションを機能させたくないことはわかっています。高度に最適化されたストアド プロシージャを作成し、それらを呼び出して特定の非常に狭い結果を取得します (多くの結合があるため、とにかく特定のエンティティを返すだけではありません)。
どのDALテクノロジー/ライブラリを使用すればよいか、少し混乱していますか? SqlConnection/SqlCommand の方法を使用したくありません。あいまいなバグを隠す可能性が高いコードをさらに記述する必要があるためです。
バグ サーフェスをできるだけ小さくし、プロセスに対応できるテクノロジーを使用したいのですが、その逆ではありません...
次の可能性を与えるライブラリはありますか?
- 名前による単純な SP 実行の手段を提供する
- 返されたデータの自動マテリアライゼーションを提供するので、ラムダ関数を使用して特定のマテリアライザーを提供できますか?
お気に入り:
List<Person> result = Context.Execute("StoredProcName", record => new Person{
Name = record.GetData<string>("PersonName"),
UserName = record.GetData<string>("UserName"),
Age = record.GetData<int>("Age"),
Gender = record.GetEnum<PersonGender>("Gender")
...
});
または、複数の結果セットなどを返すストアド プロシージャを呼び出すことさえできます。
List<Question> result = Context.ExecuteMulti("SPMultipleResults", q => new Question {
Id = q.GetData<int>("QuestionID"),
Title = q.GetData<string>("Title"),
Content = q.GetData<string>("Content"),
Comments = new List<Comment>()
}, c => new Comment {
Id = c.GetData<int>("CommentID"),
Content = c.GetData<string>("Content")
});
基本的に、この最後のものは機能しません。これは、両方をバインドする方法を知らないためです...しかし、要点はわかります。
すべてを 1 つの質問にまとめると、ストアド プロシージャの実行とデータ マテリアライゼーション用に最適化された DAL ライブラリはありますか?