У меня есть три проекта, которые совместно используют одну и ту же БД. Как лучше всего использовать EF для всех?
У меня есть три проекта (проекты WCF, а не клиенты), у меня есть одна база данных для всех, теперь, как я буду использовать EF с этим? я должен сделать четвертый проект, который будет иметь контекст БД и сущности, а затем добавить ссылку на него во всех трех проектах? или я должен просто иметь отдельный контекст для каждого проекта и просто добавить таблицы, которые мне нужны для каждого проекта? некоторые таблицы действительно используются повсеместно. так, что является лучшим решением для этого?
Другой вопрос: должен ли я раскрывать контекст EF db в отдельном проекте, чтобы другие проекты могли получить к нему доступ? что-то вроде:
MySeparateProject myPr = new MySeparateProject();
using (var db = new myPr.DBContext())
{
// do stuff with entities
db.SaveChanges();
}
2 ответа
Я думаю, что самое чистое, что нужно сделать, это создать проект доступа к данным (библиотека классов), который содержит только ваши модели и контекст БД и ссылается на него из всех ваших других проектов.
Некоторые люди скажут, что вы должны сделать одну библиотеку классов только с моделями, а затем иметь еще одну, у которой есть DbContext, и есть классы репозитория, и тогда... Я чувствую, что это излишне для большинства проектов. Наличие моделей и контекста в одном месте просто упрощает синхронизацию всех зависимых проектов, когда дело доходит до доступа к данным.
Вот типичная структура проекта для меня:
Здесь Squelch.Data содержит все мои модели и контексты БД, Squelch.Core содержит основную бизнес-логику, а два моих "приложения" (Squelch.Portal ad CdrImport) и различные тестовые примеры ссылаются на эти библиотеки базовых классов.
Я хотел бы создать отдельный проект доступа к данным. Это хорошая практика, чтобы отделить ваш слой данных в любом случае. В зависимости от характера проекта и того, как вы хотите его протестировать, вы можете захотеть взглянуть на что-то вроде шаблона репозитория (хотя есть споры о его ценности с EF).