死んでいるわけではありませんが、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の防御では、プロジェクトでそれを起動して実行する際のオーバーヘッドがはるかに少なくなります。