0

以下の 2 つのアプローチの間に、実際のパフォーマンス、品質、またはセキュリティの違いはありますか?

アプローチ 1:

ViewBag.Foo= db.Words.Where(w => w.WordBaseID == 1 && w.LanguageID == lang).FirstOrDefault().Text;

アプローチ 2:

var query = "SELECT Text FROM Words WHERE WordBaseID = {0} AND LanguageID = {1}";
ViewBag.Foo= db.Database.SqlQuery<string>(query, 1, lang).FirstOrDefault();
4

2 に答える 2

5

パフォーマンスやセキュリティに違いはないと思います。違いは、アプリケーションのメンテナンスにあります。2 番目のアプローチでは、コード内に SQL クエリを記述します。つまり、C# と SQL を混在させ、ORM の目的を完全に無効にします。つまり、プレーン SQL を作成する場合は、ADO.NET の使用を検討してください -> ORM よりも高速です。

コード内に多数の SQL クエリがある場合、テーブルの名前を変更することに決めた日に、コード内に変更する場所がたくさんありますが、従来の ORM ツールに固執している場合は、マッピングを更新するだけで済みます。フレームワークは、適切な SQL クエリを発行することを心配しています。ネイティブ SQL クエリを作成することのもう 1 つの欠点は、特定のデータ プロバイダーに縛られることです。すべてのデータベースがすべての SQL メソッドをサポートしているわけではないことに注意してください。ORM フレームワークは、方言などを考慮に入れます...

于 2012-12-29T16:04:23.690 に答える
0

これにより、生成されたSQLが得られます。

var result = db.Words.Where(w => w.WordBaseID == 1 && w.LanguageID == lang).FirstOrDefault().Text;

var sql = ((System.Data.Objects.ObjectQuery)result).ToTraceString();

違いを比較することができます。

于 2012-12-29T16:05:33.697 に答える