LINQ to SQLは死んでいますか?


17

Linq to SQLを使い続ける理由はありますか、またはEF、NHibernateなどのORMテクニックに移行する方が良いでしょうか。

長い間存在する新しい大規模エンタープライズアプリケーションでLinq to SQLを使用しています。この新しいエンタープライズアプリケーションの動機は、アプリケーションがVisual Basicで作成された通常のものであり、Microsoftがサポートを停止したため、アプリケーションの書き換えを余儀なくされたことです。すでにそこにいるようですが、今回はDAL(Data Access Layer)を使用しています。

私はすでにこの記事を読んでいますが、EFの弱点と比較するだけです。


+1素晴らしいQ。これは私にとって魅力的です。読みやすくするために、ストアドプロシージャとパラメーター化されたSQLクエリ文字列をLINQ to SQLに移動することを検討してきました。
fearoffours

MSには、.NET 4のスライドショータイプの小さなものがあり、死んでいないと言っていますが、それは多くのことを意味します。彼らは.NET 4.0でそれを改善しました:damieng.com/blog/2009/06/01/linq-to-sql-changes-in-net-40
MetalMikester

二度とない。この質問、StackOverflowの広告悪心について議論されています。FUDと言えますか?
ロバートハーヴェイ

回答:


11

既に使用していて、問題が発生していない場合は、既存のプロジェクトを引き続き使用します。

Linq2SQLは非常に優れていますが、制限されたORMです。Linq2SQLが提供する基本的な方法よりも複雑な方法でオブジェクトをマップする場合、行き詰まります。Microsoftは、.net 4のリリース時にいくつかのバグを修正しましたが、それを拡張するためにリソースを投入するつもりはないと述べています。

寿命が限られている可能性のある非常にシンプルなプロジェクトがある場合、Linq2SQLへの依存関係が至る所に漏れないように注意している限り、Linq2SQLは適切な軽量の選択肢です。Linq2SQLはほとんど行き止まりであるため、他の何か(NHibernateやEFなど)を使用します。


私は同意することができますが、本当に死んでいるわけではありませんが、何らかの方法でトリアージのテーブルにあります。何かが機能していて、それを今すぐ変更すると大きな影響がある場合は...少し座ってEF / NHibernateへの変換を行う良い時期を探したいかもしれませんが、財政的なアップグレードプロジェクトになる可能性がありますすべての人がテーブルの上に仕事、パン、バターを求めています)。
10

@cyberzed:それは不必要な作業の良い言い訳のように聞こえます。
ロバートハーベイ

12

死んでいるわけではありませんが、Microsoftは現在Entity Frameworkに注力しています。

私は小さなプロジェクトでLINQ to SQLを使用しましたが、軽量のデータレイヤーとして非常に優れているため、同様のサイズのプロジェクトで再度使用することを検討します。LINQの実装自体は本当に優れており、最近までNHibernate LINQプロジェクトよりもはるかに優れていました。L2Sを使用した大規模なプロジェクトでは、L2Sの「DataContext」クラスの制限により、満足のいく作業単位パターンを思い付くのが難しいことがわかりました。L2Sで「リクエストごとのセッション」のようなものを実装しようとすると、非常に困難または不可能に思われます。

また、L2Sが多くのマッピングオプションを提供していないため、L2Sを本当のORMとは本当に考えていません。クラスの設計は、データベーススキーマ(クラスごとのテーブル)に従う必要があります。そうしないと、あらゆる段階であなたと戦うことになります。L2Sが気に入らないもう1つの点は、特定のタイプ(EntitySetおよびEntityRef)を使用して、コレクション、参照、遅延読み込みを処理する必要があることです。これは、抽象化の別のレイヤーを追加せずにドメインモデルORMに依存しないことは不可能であることを意味します。

L2Sに関する他の問題は、クエリを生成するためにLINQのみに依存していることです。LINQプロバイダーは非常に適切に記述されており、通常、大部分のクエリに対して適切なSQLを作成しますが、LINQではうまく表現できない複雑なクエリがあるのではないかと心配です。L2Sを使用すると、これらの場合は基本的にストアドプロシージャの呼び出しに戻る必要がありますが、(たとえば)NHibernateには、生成されたSQLをさらに制御したいときに使用できるいくつかのAPI(LINQプロバイダー、QueryOver、HQLなど)があります。

NHibernateに対するL2Sの防御では、プロジェクトでそれを起動して実行する際のオーバーヘッドがはるかに少なくなります。


2

それはまだ機能しているので死んでいませんが、それがさらに開発されていない場合、それは何か他のものに移動する意味があります。

ただし、アプリケーションで機能する場合は、変更のために変更しても意味がありません。


2

死んだ私見よりも安定:

http://www.thinqlinq.com/default/LINQ-to-SQL-enhancements-for-2010.aspx

http://jonkruger.com/blog/2009/06/06/linq-to-sql-is-not-dead/

彼らは改善努力をEntity Frameworkに移し、その製品が成功するためには本当に必要です。しばらくの間、linq2sqlの互換性とバグ修正以外の新しいことは期待できません。

間違っていなければ、このサイトはlinq2sqlを大量に使用して実行されています。


「安定した」ための+1 L2Sを表示する最良の方法、私見。安定しており、もはや拡張/変更されていません。
クエンティン

申し訳ありませんが、「互換性とバグ修正以外の新しいものはありません」という意味です。それは基本的にコミュニティがそこから離れることを保証するものであり、それを使用する多くの新しいプロジェクトを見ることはないので、おそらく新しいプロジェクトでも使用したくないでしょう。「デッド」とは、機能しないことを意味するのではなく、革新や関心がほとんどないことを意味します。
ジェレミー

大規模な企業の観点から見ると、コアが変更されていないという事実は、多くの場合、最終的に承認された技術のリストに載ることができることを意味します。私の仕事では、これをしばらく待っていました。EFはまだ飛び込むのにまだ不安定であり、L2SはEFのオーバーヘッドが望ましくない状況に常に関心を集めています。
ビル

@Jeremy人々はまだTeXを使用していますか?
代替案

1

奇妙なことですが、このフレージングを多く見ました(「LINQ2SQLは死んでいます」)。それがどこから来たのかはわかりません*。死んだWindows XPと同じです。マイクロソフトはサポートを中止し、新しいものを作成しました(そして私の目にはより良くなりました)が、Linq2SQLを自由に使用できるのと同じようにXPを自由に使用できます。確かに、カスタムDotNetNukeモジュールを作成するときにLinq2SQLを使用します。ただし、code-first-development(http://weblogs.asp.net/scottgu/archive/2010/07/16/code-first-development-with-entity-framework-4.aspxなどのEF4の新機能では)Linq2SQLに固執する理由を見つけるのは困難です。コードを調べて更新する理由はわかりませんが、新しいコードについては、なぜEF4を使用したくないのかわかりません。

*しかし、正直なところ、私は非常に…セマンティクスに執着しています!他の人に迷惑をかける場合は申し訳ありません:)

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.