Если ваше решение полностью ориентировано на будущее, тогда мне нравится использовать подход, основанный на коде, в рамках сущности (простите за бесстыдный плагин, но я разместил в своем блоге учебник об этом http://www.terric.co.uk/code-first-entity-framework-and-sql-migrations/). Мне нравится управление, которое оно дает мне, что я не могу получить, когда я генерирую .edmx.
Переходя к структуре, я обычно разделяю слои своего проекта на отдельные сборки: домен (и данные) и веб-интерфейс, структурированный со следующими папками (пространствами имен):
Domain (business layer and data layer assembly)
Data (contains my EF data context and Interface to the context)
Entities (contains my POCO objects for the context)
WebUI (presentation layer assembly)
Infrastructure (contains my dependency inject initialiser)
Я никогда не DI мои сущности и вместо этого использую бетоны в моем уровне представления, однако контекст, который я всегда буду DI, как я могу / должен использовать ADO.Net (особенно для устаревших приложений), где мой уровень домена будет по-прежнему использовать ADO.Net для чтения / записи моих объектов POCO. Таким образом, когда я в конечном итоге получаю возможность внедрить ORM с помощью своего старого приложения, я могу просто добавить версию ORM в свой домен.
В качестве сноски к этому, если вы следовали шаблону репозитория, вы всегда могли связать их и DI ваши репозитории В любом случае, ваши POCO должны соответствовать конкретному решению, чтобы основная структура данных не претерпевала существенных изменений, поэтому я никогда не добавляю их.