Вот некоторые из моих мыслей:
a) ORM существуют для упрощения и уменьшения нагрузки на разработчика. Во многих хорошо спроектированных реляционных моделях к базе данных можно получить доступ с помощью повторяющегося кода (просто измените имя таблицы, имена столбцов, но поведение очень схожее). ORM генерирует код, который разработчик может использовать сразу же, и настраивает его по мере необходимости. Разработчику не нужно писать SQL - это работа ORM сейчас. Он также обновляет сгенерированный код, автоматически приспосабливаясь к изменениям схемы базы данных.
б) Я не знаю. Это действительно зависит от ваших требований и зависимостей. Насколько вы хотите, чтобы ваш ORM был? Насколько важна производительность? Насколько удобен для разработчиков код? Entity Framework стремится создать более полную библиотеку классов в качестве слоя доступа к данным, предоставляя при этом визуальные инструменты для настройки сгенерированного кода. Linq to SQL, как правило, легче разбросать по разным методам. Это только один пример.