У нас есть сотни таблиц в нескольких базах данных (один сервер). Мы занимаемся разработкой таблиц, перетаскивая таблицы в разные файлы дизайнеров DBML, каждый в разных папках, представляющих разные пространства имен в каждом проекте. Файлы конструктора помечены как не подлежащие компиляции, и мы используем специально созданный шаблон T4, который генерирует наш код путем чтения из любых файлов DBML в проекте. Это позволяет нам полностью контролировать сгенерированный код, поэтому мы можем реализовать такие вещи, как реализация интерфейса (IAuditable - один из примеров, где у нас есть CreatedBy, CreatedDate, ModifiedBy, ModifiedDate). Таким же образом мы также можем поместить System.ComponentModel.DataAnnotations в наши объекты Linqed, не прибегая к Классам друзей . У нас есть второй шаблон T4, который отвечает за обновление DBML из базы данных, поэтому мы можем убедиться, что таблицы имеют префикс из 3 частей (db.schema.tbl), и поэтому нам не нужно удалять и повторно добавлять в дизайнер. XML просто изменяется на основе чтения схемы БД и обновления DBML. Мы также создаем объект репозитория / менеджера для каждого POCO, который имеет несколько общих операций запроса, таких как GetByID (), а также обрабатывает фиксации и ведение журнала аудита. Эти менеджеры расширяются за счет всех пользовательских запросов, которые вам нужно написать для каждой таблицы, и им принадлежит DataContext. Этот дизайн иногда называют "Мама-может-я?" подход, при котором объект, привязанный к таблице, должен попросить своего менеджера сделать все для него.
Я обнаружил, что это очень универсальный и удобный способ работы с L2S, и это сделало нашу внутреннюю разработку простой, чтобы мы могли сосредоточиться на пользовательском опыте. Единственным недостатком является то, что если мы делаем ассоциации через пространства имен, вы должны вручную добавить их в частичный класс, потому что в противном случае вам пришлось бы добавить эту внешнюю таблицу в другой DBML, чтобы нарисовать ассоциацию. На самом деле это не так уж и плохо, поскольку заставляет нас задуматься о специфике наших пространств имен и сократить лишние. Использование T4 таким способом является отличным способом для разработки DRY (не повторяйте себя). Определение таблицы - это единственное место, где вам нужно изменить структуру, и все это распространяется. Валидация идет в одном месте, POCO. Запросы идут в одном месте, менеджер. Если вы хотите сделать что-то подобное, вот хорошее место, чтобы начать .