No está muerto, pero Microsoft ahora está enfocado en Entity Framework.
He usado LINQ to SQL en proyectos pequeños, y es bastante bueno como una capa de datos liviana y consideraría usarlo nuevamente en proyectos de tamaño similar. La implementación de LINQ en sí misma es realmente buena y, hasta hace poco, mucho mejor que el proyecto NHibernate LINQ. En el proyecto más grande en el que utilicé L2S, me resultó difícil encontrar un patrón de unidad de trabajo con el que estuviese satisfecho, debido a las limitaciones con la clase L2S 'DataContext'. Intentar implementar algo como 'Sesión por solicitud' con L2S parece muy difícil o imposible.
Tampoco consideraría realmente L2S como un verdadero ORM, ya que realmente no le da muchas opciones de mapeo. El diseño de su clase realmente necesita seguir el esquema de su base de datos (tabla por clase) de lo contrario luchará con usted en cada paso del camino. Otra cosa que no me gusta de L2S es la necesidad de usar tipos específicos ( EntitySet
y EntityRef
) para manejar colecciones, referencias y carga diferida. Esto significa que no es posible mantener su modelo de dominio ORM agnóstico sin agregar otra capa de abstracción.
Mi otro problema con L2S es la dependencia exclusiva de LINQ para generar consultas. El proveedor LINQ está muy bien escrito y, en general, crea un SQL decente para la mayoría de las consultas, pero me preocupa que haya consultas más complejas que no se pueden expresar bien con LINQ. Al usar L2S, básicamente tiene que volver a llamar a procedimientos almacenados en estos casos, mientras que (por ejemplo) NHibernate tiene varias API (proveedor LINQ, QueryOver, HQL, etc.) que se pueden usar cuando desea más control sobre el SQL generado.
En la defensa de L2S sobre NHibernate, hay mucho menos gastos generales para ponerlo en marcha en un proyecto.