1

私は 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 ライブラリはありますか?

4

1 に答える 1

0

Business Layer Toolkitはまさにここで必要なものかもしれません。複数の結果セットを含む多くのシナリオをサポートする軽量の ORM ツールですが、実行するのは非常に複雑に見えます。

于 2010-10-20T13:37:23.990 に答える