У меня есть три проекта, которые используют одну и ту же БД, каков наилучший способ использовать EF для всех?

У меня есть три проекта (проекты WCF, а не клиенты), у меня есть одна база данных для всех, теперь как я буду использовать EF с этим? должен ли я сделать четвертый проект, который будет иметь контекст db и сущности, а затем добавить ссылку на него во всех трех проектах? или я должен просто иметь отдельный контекст для каждого проекта и просто добавлять таблицы, которые мне нужны для каждого проекта? некоторые из таблиц действительно используются повсюду. так какое лучшее решение для этого?

Другой вопрос: должен ли я раскрывать контекст EF db в отдельном проекте, чтобы другие проекты могли получить к нему доступ? что-то вроде:

 MySeparateProject myPr = new MySeparateProject();
 using (var db = new myPr.DBContext())
 {
     // do stuff with entities
     db.SaveChanges();
 }

Ответ 1

Я думаю, что самое лучшее, что нужно сделать, это создать проект доступа к данным (библиотека классов), который содержит только ваши модели и контекст db, и ссылаться на все ваши другие проекты.

Некоторые люди скажут, что вы должны сделать одну библиотеку классов только с моделями, а затем иметь еще одну, которая имеет DbContext, а также классы репозитория, а затем.... Я считаю, что это слишком много для большинства проекты. Наличие моделей и контекста в одном месте просто упрощает постоянство синхронизации всех зависимых проектов, когда дело доходит до доступа к данным.

Здесь типичная структура проекта для меня:

enter image description here

Здесь Squelch.Data​​strong > содержит все мои модели и контексты db, Squelch.Core содержит основную бизнес-логику и два моих "приложения" (Шумоподавитель .Portal ad CdrImport), а также различные тестовые примеры, все ссылки на эти библиотеки базового класса.

Ответ 2

Я бы создал отдельный проект доступа к данным. Эффективная практика заключается в том, чтобы отделить ваш уровень данных. В зависимости от характера проекта и того, как вы хотите его протестировать, вы можете взглянуть на что-то вроде шаблона репозитория (хотя есть споры о его значении с помощью EF).

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