Não está morto, mas a Microsoft agora está focada no Entity Framework.
Eu usei o LINQ to SQL em pequenos projetos, e é muito bom como uma camada de dados leve e consideraria usá-lo novamente em projetos de tamanhos semelhantes. A implementação do LINQ em si é realmente boa e até recentemente muito melhor que o projeto LINQ do NHibernate. No projeto maior em que usei o L2S, achei difícil criar um padrão de unidade de trabalho que me agradava, devido a limitações na classe 'DataContext' do L2S. Tentar implementar algo como 'Sessão por solicitação' com L2S parece muito difícil ou impossível.
Eu também não consideraria o L2S como um ORM verdadeiro, pois realmente não oferece muitas opções de mapeamento. Seu design de classe realmente precisa seguir o esquema do banco de dados (tabela por classe), caso contrário, ele lutará com você a cada passo do caminho. Outra coisa que eu não gosto no L2S é a necessidade de usar tipos específicos ( EntitySet
e EntityRef
) para lidar com coleções, referências e carregamento lento. Isso significa que não é possível manter o ORM do modelo de domínio independente de adicionar outra camada de abstração.
Meu outro problema com o L2S é a única dependência do LINQ para gerar consultas. O provedor LINQ é muito bem escrito e geralmente cria SQL decente para a maioria das consultas, mas tenho minhas preocupações de que haja consultas mais complexas que não possam ser bem expressas com o LINQ. Usando o L2S, você basicamente precisa reverter para chamar procedimentos armazenados nesses casos, enquanto (por exemplo) o NHibernate possui várias APIs (provedor LINQ, QueryOver, HQL etc.) que podem ser usadas quando você deseja mais controle sobre o SQL gerado.
Na defesa do L2S sobre o NHibernate, há muito menos sobrecarga na instalação e execução de um projeto.