Eu me ensinei sempre a lidar com qualquer código de acesso a dados em uma 'camada' completamente separada da minha lógica de negócios e código da interface do usuário. Essa sempre foi uma arquitetura muito boa para mim e quaisquer 'regras' ou práticas recomendadas que eu vejo ainda conseguem se encaixar nesse estilo de codificação, especialmente o Princípio de Responsabilidade Única .
Para a maioria dos meus projetos domésticos, eu usava meu próprio ORM que criei, que sempre pretendi criar código-fonte aberto. No entanto, desde então, o LINQ tornou-se disponível, o que era muito semelhante ao modo como meu ORM funcionava (mas ... melhor).
Não há nada que eu pudesse fazer anteriormente com meu próprio ORM que agora não posso fazer com LINQ (exceto bits da integração REST). Então minha pergunta é; LINQ é minha nova camada de acesso a dados? Preciso mais dessa camada? Minha BLL deveria apenas falar diretamente com o LINQ? Ou essa prática ainda é ruim?
Editar:
A pergunta original se referia ao LINQ to Entities, mas há muitas respostas interessantes sobre o LINQ to SQL. Quais são os pensamentos das pessoas sobre os dois? Eu entendo que o LINQ to SQL não pode realmente substituir um DAL, mas o Entity Framework poderia?