У меня есть три проекта, которые совместно используют одну и ту же БД. Как лучше всего использовать 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).

http://msdn.microsoft.com/en-us/library/ff649690.aspx

Другие вопросы по тегам