Siempre me enseñé a manejar cualquier código de acceso a datos en una 'capa' completamente separada de mi código de lógica de negocios y UI. Esta siempre ha sido una muy buena arquitectura para mí y cualquier 'regla' o mejor práctica que veo, aún logra encajar en este estilo de codificación, especialmente en el Principio de responsabilidad única .
Para la mayoría de mis proyectos caseros, usaría mi propio ORM que creé, que siempre tuve la intención de hacer de código abierto. Sin embargo, desde entonces, LINQ estuvo disponible, que era muy similar a la forma en que funcionaba mi ORM (pero ... mejor).
No hay nada que pudiera hacer previamente con mi propio ORM que ahora no puedo hacer con LINQ (excepto bits de la integración REST). Entonces mi pregunta es; ¿LINQ es mi nueva capa de acceso a datos? ¿Ya necesito esta capa? ¿Debería mi BLL hablar directamente con LINQ? ¿O es esta mala práctica todavía?
Editar:
La pregunta original se refería a LINQ to Entities, pero hay muchas respuestas interesantes con respecto a LINQ to SQL. ¿Qué piensan las personas sobre ambos? Supongo que LINQ to SQL realmente no puede reemplazar un DAL, pero ¿podría Entity Framework?