В настоящее время мы используем EF с DDD, но я должен сказать, что в его текущей реализации EF не очень подходит для такого рода архитектуры. Основная проблема заключается в том, что единственный способ, которым EF работает в настоящее время, состоит в том, чтобы каждый объект «Entity» происходил из базового класса, специфичного для EF.
С другой стороны, весь смысл репозиториев состоит в том, чтобы абстрагировать от технологии доступа к данным. Вся идея DDD заключается в том, что модель предметной области должна быть неограниченной из-за деталей реализации, таких как выбор технологии доступа к данным. Это означает, что доменные объекты должны быть определены так, чтобы они оставались невежественными.
Другими словами: вы не можете использовать EF 'Entities' в качестве объектов домена, поэтому в вашем DAL вы должны вручную написать много кода, который отображается в и из объектов домена в EF 'Entities'. Это очень быстро устает.
Я бы определенно посчитал наличие IQueryable в репозитории утечкой абстракции, и это не имеет большого смысла на языке DDD. Если доменные объекты являются связными единицами, не имеет особого смысла выбирать из них только определенные «столбцы».
В EF для .NET 4.0 мы получим невосприимчивость к постоянству, поэтому в будущем она должна стать лучше ...