He aquí algunos de mis pensamientos:
a) ORM existen para simplificar y reducir la carga de trabajo del desarrollador. En muchos modelos relacionales bien diseñados, se puede acceder a la base de datos a través de un código que es altamente repetitivo (simplemente cambie el nombre de una tabla, los nombres de las columnas, pero el comportamiento es muy similar). Un ORM genera un código que el desarrollador puede usar de inmediato y ajustarlo según sea necesario. El desarrollador no necesita escribir SQL: ese es el trabajo del ORM ahora. También actualiza el código generado al ajustarse automáticamente a los cambios de esquema de la base de datos.
b) No lo sé. Realmente depende de tus requisitos y dependencias. ¿Cuán involucrado quiere que sea su ORM? ¿Qué tan importante es el rendimiento? ¿Qué tan amigable para los desarrolladores quieres que sea el código? Entity Framework tiende a generar una biblioteca de clases más completa como la capa de acceso a datos, al tiempo que le brinda herramientas visuales para ajustar el código generado. Linq to SQL tiende a ser más fácil de espolvorear a través de diferentes métodos. Ese es solo un ejemplo.
Entity Framework es el ORM principal actualmente impulsado por Microsoft. Si desea obtener su ORM de Microsoft, esa es una razón para elegirlo. Otros ORM ofrecen características diferentes y hay muchas otras preguntas sobre StackOverflow sobre la comparación de ORM de .NET (http://stackoverflow.com/questions/1377236/nhibernate-entity-framework-active-records-or-linq2sql/). –