Я работаю с базой данных SQL Server с 1000+ таблицами, еще несколькими сотнями представлений и несколькими тысячами хранимых процедур. Мы надеемся начать использовать Entity Framework для наших новых проектов, и мы работаем над нашей стратегией для этого. Я зациклен на том, как лучше разбить таблицы на разные модели (EDMX или DbContext, если мы сначала перейдем к коду). Я могу придумать несколько стратегий сразу:
- Разделение по
схемам Наши таблицы разделены, вероятно, по дюжине схем. Мы могли бы сделать одну модель на схему. Это не идеально, потому что dbo по-прежнему очень большой, с 500+ таблицами / представлениями. Другая проблема заключается в том, что определенным единицам работы в конечном итоге придется выполнять транзакции, которые охватывают несколько моделей, что увеличивает сложность, хотя я предполагаю, что EF делает это довольно просто. - Разделение по назначению
Вместо того, чтобы беспокоиться о схемах, разделите модели по назначению. Таким образом, у нас будут разные модели для каждого приложения, или проекта, или модуля, или экрана, в зависимости от степени детализации, которую мы хотим получить. Проблема, которую я вижу с этим, состоит в том, что есть определенные таблицы, которые неизбежно должны использоваться в каждом случае, такие как User или AuditHistory. Добавляем ли мы их в каждую модель (я думаю, что это нарушает «СУХОЙ»), или они в отдельной модели, используемой в каждом проекте? - Совсем не разделяйте - одна гигантская модель.
Это очевидно просто с точки зрения разработки, но, исходя из моих исследований и моей интуиции, кажется, что это может работать ужасно, как во время разработки, так и во время компиляции и, возможно, во время выполнения.
Как лучше всего использовать EF для такой большой базы данных? В частности, какие стратегии используют люди при разработке моделей для этого объема объектов БД? Есть ли варианты, которые я не думаю об этой работе лучше, чем у меня выше?
Кроме того, это проблема в других ORM, таких как NHibernate? Если так, то они придумали какие-нибудь лучшие решения, чем EF?