2009-04-30 51 views
6

LINQ to SQLを学習して使用するのに時間を費やすことを検討していますが、SQLを埋め込むことを推奨していない何年ものベストプラクティスの後、私はパラダイムを変えるのに苦労しています。LINQに切り替える

なぜコンパイルされたコードにクエリを埋め込むことが今では受け入れられているようですか?それはいくつかの点で私にとってはほとんど後退しているようです。

LINQに切り替えた後、修正クエリ/コンパイル/デプロイサイクルに問題があった人はいますか?

完成したEntity Frameworkを待つかもしれないと思います。

あなたはどう思いますか?

+4

+1をコンパイルしたコードに埋め込むことを指摘するのは、本当に悪い習慣です!私はあなたと一緒です! –

答えて

8

LinqとSqlの利点は、実際にはコンパイルされたコードにクエリを埋め込まないことです。 Linqステートメントは、.Netコードには、実際のSqlステートメントではなく、Sqlステートメントをビルドするために必要なロジックが実際にあることを示しています。

関連するドキュメントを持つsprocsの長いリストではなく、実行するSqlに直接変換する.Netコードを持つことは本当に意味があります。 Linqの方法は、維持し改善する方がはるかに簡単です。

既存のプロジェクトをLinqに切り替えるとは思えません。実際にはデータレイヤー全体を置き換えるものであり、そのレイヤーへのすべてのアクセスが変更される可能性があります。非常に似通ったモデルから切り替えるのでなければ、コストはどんな潜在的な利益に対しても非常に高くなるでしょう。

Linq to Sqlの真のパワーは、すぐに新しいアプリケーションを作成することです。データレイヤーコードを非常に迅速に作成することができます。

+1

LINQ to Entitiesを今すぐ開始するのが良いかもしれないことを除いて同意します(しかし、すべての同じコメントが埋め込みクエリを適用します)。 – Richard

+0

私はベータ版(6ヶ月)だったので、私は大変なEFプロジェクトを開発していましたが、後悔しました。 EFは生産準備ができていません。 Linq2SQLです。 EF今のところ、データアクセスの技術、ギャップ、非効率なクエリ、不完全なLinqの実装、データバインディングの欠陥、劣悪なオブジェクとサービスモデルのようなハーフバックのデータセンターです。あなた自身の痛みを救うLinq2SQLは、素晴らしい技術である使用してください。 EF vNextがどれほど良いか見てみましょう。しかし、それまでは私の報いは明らかにされていません。 –

2

あなた自身がSQLを直接記述するための抽象としてLINQ to SQLを考える必要があります。あなたがこの周りにあなたの頭を得ることができれば、あなたは正しい方向に一歩を踏み出しました。また、コンパイルされたsprocsの方が速く、SQLアカウントにはデータ読み取り/書き込み権限が与えられないなど、長い間信じられている信念を放棄する必要があります。

明確なDALが存在する限り、既存のソリューションを徐々にLINQからSQLに移行することが可能であり、コードを消費することで生じる契約に影響を与えずに実装を変更するだけです。参照リストは、影響の少ない読み込み専用のデータセットであるため、簡単な候補です。レトロフィットを意識する必要がある主なことは、あらかじめコード化してデータベースをモデル化しておけば、あいまいなクラス名になる可能性があることです。

LINQをSQLに大規模なエンタープライズ(CTPの日以降)に導入する際のヒントを得て、私は再びハートビートでやります。完璧ではなく、問題はありますが、特に開発のスピードと保守性に関しては大きなメリットがあります。それは新しいパラダイムであり、間違いなく確実に前進しています。

3

私はあなたのポイントをundertand、これは確かに

実は私はおそらくあなたのエンティティがあなたの概念をモデル化する、SQLに離れLINQから操縦し、エンティティへのLINQでより多くのを見てしまう...歩後退のビットのように見えるんデータモデルと私個人は、私のコードにクエリモデルを概念モデルとして組み込むことがより快適に感じられます。実際の物理モデルはエンティティフレームワークによって抽象化されています。

このリンク(しゃれを言い訳)エンティティとEntity FrameworkのにLINQについて説明します。これは興味深い記事が両方のアプローチの長所と短所discussignさhttp://msdn.microsoft.com/en-us/library/bb386992.aspx

http://dotnetaddict.dotnetdevelopersjournal.com/adoef_vs_linqsql.htm

編集別の考えを、もしあなたがEFを待たずにNHibernateを見ていれば、LINQでもそれをすることができます... http://www.hookedonlinq.com/LINQToNHibernate.ashx

+1

理論上は、はい。しかし実際には、Entity Framework/Linq-to-Entitiesに基づいた制作コードを開発することは本当に躊躇しています。 Linq-to-SQLは実稼動可能ですが、EFは使用できません。あなたが言うように、抽象レイヤーを追加しても、その抽象化は、非効率なSQLクエリが相手側(db側)から出てくることになります。 EF vNext - 多分、陪審員はまだその上にいる。私たちは、それがリリースされたときに何が起こるかを見なければならないでしょうが、EFのために行く(成功または失敗は未だに未知である)ということは、私が推薦するものではありません。 ちょうど私の2セント... :) – KristoferA

+1

完全に同意します...しかし、私はEFを待っています。 LINQは強力で有用で価値あるものです.- –

+0

EF 1.0は限られていますが、実稼働環境で使用できます。すべてのものと同様に、少し学習が必要で、制限(フレームワークとIDEの両方の機能)を克服するために必要なハックがいくつかあります。しかし、いくつかの方法で制限されていますが、それは十分に固いですし、アプリケーションを起動させるためのスピーディーな方法です。学習は、後でバージョン2のためにクリーンアップされたときに学習を保存します...私は4(? 。 – misteraidan

0

LINQ to SQLの実装は、SQL Serverデータベースだけでなく、 SQL Server devel opersはこの効率的なORMを利用することもできます。 クエリレベルのLaodWith()のサポートを既に追加し、エラー処理を拡張しました。 また、3つの継承モデル(TPH、TPT、TPC)とキーフィールド生成をすべてサポートする予定です。 サポートされているデータベースのリストを見つけることができますhere

+0

それは私たちのために無料ですか? –

0

私はあなたのコードにStored Procの名前を埋め込む以上のことはあなたのコードにSQLを埋め込んでいるとは思いません。多くの場合、Procの変更には、コードの変更が必要になります。たとえば、新しいin/outパラメータを追加するか、getter/setterメソッドを更新して新しい列を参照する必要があります。

DB内のprocsとカラムでコードのプロパティとメソッドを整列させるために、2倍のコードを書き込むという足跡が残っています。

関連する問題