1

ORM (Bltoolkit) で文字列形式の sql を使用します。必要なくLinqを使用することは好みません。

  • 複雑なクエリを Linq で構築するのは困難です。Linq で複雑なクエリを作成するための十分なリソースがありません。
  • ORM で文字列 sql を使用すると、SQL クエリの実践を改善できます。そうしないと、クエリが中断されます(LinqはSQLクエリを改善しないと思います)。
  • バインド パラメータを使用して、SQL インジェクションからクエリを保護することもできます。

あなたの考えは?それは良い習慣ですか?

Linq なしで ORM (私の場合は BlToolkit) を使用する例を以下に示します。

        var db = new Veritabani("HstConn");

        try
        {
            var sorgu = @"select t.tcno ""KullaniciAdi"", t.ad ""Ad"", t.soyad ""Soyad"", t.kurum_kodu ""KurumKodu"", 
                                 t.ilkodu ""IlKodu"", t.kurum_turu ""KurumTuru"", t.e_posta ""Eposta"", t.dogrulama_kodu ""DogrulamaKodu""
                            from saglikcalisanlari t
                           where tcno = :kullaniciAdi
                             and sifre = :sifre";

            return db.SetCommand(sorgu,
                                 db.Parameter(":kullaniciAdi", kullaniciAdi.Trim()),
                                 db.Parameter(":sifre", sifre.Trim().Md5Hash())).ExecuteObject<SaglikCalisani>();
        }
        catch (Exception exc)
        {
            throw new Exception("Veritabanı Hatası: " + exc.Message);
        }
        finally
        {
            db.Close();
            db.Dispose();
        }
4

3 に答える 3

2

これは常に主観的で文脈に依存します。おそらく本当の問題は、「本当に別のデータベースをターゲットにするか」ということです。その答えが「いいえ」の場合、固定 SQL で問題ない可能性が高くなります。複数の異なるバックエンドをターゲットにする必要がある場合は、HQL や ESQL などの抽象化がより適切な場合があります。これは LINQ とは異なりますが、プラットフォームに依存しません。

率直に言って、複雑なケースでは開発者がジェネレーター (LINQ など) よりも 10 回中 9 回パフォーマンスが優れているため (EU 発明統計局の調査によると)、SQL を手動で調整したい場合もたくさんあります。 .

正しくパラメータ化する限り、これらのシナリオでは SQL 自体で問題ありません。

stackoverflow.com では手書きの TSQL を広く使用しています。その理由は次のとおりです。

  • バックエンドを変更する予定はありません。変更する場合でも、クエリは氷山の一角に過ぎません。
  • 私たちはパフォーマンスを本当に気にかけています:
    • 式ツリー (LINQ) または DSL (HSQL/ESQL) を解析して TSQL を生成するには時間がかかる
    • TSQL を適切に記述し、個別にテストする必要があります。
    • プリコンパイル済みの LINQ クエリを使用した場合でも、使用してたツールで測定されたパフォーマンスの問題が実際に見られました。
  • 私たちは独自のツール (「dapper」) を作成して、絶対に必要ではないすべての機能を削除し、単純にクエリイン、オブジェクトアウトにするようにしました。
  • サイトでパフォーマンスをライブで監視するための独自のツール (「ミニプロファイラー」)
于 2013-05-31T11:04:07.180 に答える
1

はい、あなたが言及した理由は、文字列形式を選択するのに最適です。パフォーマンスに関しては、宗教的に1つを選択することにほとんど違いはありません。

アイデアは、アプリケーションのパフォーマンスをあきらめることなく生産性を高めるツールを使用することです。

たとえば、LINQ を介した SQL クエリが好きで、それに慣れている場合は、その点で不利な点は見当たりません。一方、LINQ を使用しない場合は、多くのユーザーが必要であり、プッシュする時間が難しいと感じているためです。それを学ぶために何らかの努力をします。ツールを比較できなければ、仕事に最適なツールを選択することはできません。

于 2013-05-31T11:14:42.250 に答える
0

NPocoを見てください。これはPetaPocoに基づいていますが、最近いくつかの機能強化が行われています。

SQL 文字列ビルダーを使用すると、SQL 文字列を簡単に作成できます。最新バージョンでは、必要に応じて LINQ を使用することもできます。

于 2013-05-31T11:16:59.767 に答える