2010-03-09 2 views
4

Я пытаюсь найти какую-то информацию о предпочтительной настройке решения при использовании MVC 2 и Entity Framework, и, казалось бы, наиболее интуитивно мне установить это веб-приложение в 3-х слоев:MVC 2 и Entity Framework. Должен ли я помещать Entity в отдельный слой?

  • MyProject.Web (проект MVC для презентации)
  • MyProject.Data (шлюз данных слоя с помощью Entity Framework говорить с БД)
  • MyProject.Tests (тестовый проект, как создается при создании нового проекта MVC)

Этот кажется, противоречит экзамену les I find и документацию (например, пример NerdDinner), которые видят проект MVC как посредничество непосредственно с базой данных. Пример NerdDinner помещает доступ к данным в класс репозитория, смешанный с моделями MVC.

Я пробовал идти по пути, который мне кажется лучшим, и создал мою «модель данных сущности ADO.NET» в моем отдельном проекте Data, но это дает мне ошибку, когда я пытаюсь использовать MVC для перечислите в нем предметы:

«Невозможно загрузить указанный ресурс метаданных».

, если у меня нет копии модели данных сущности в моем проекте MVC.

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

so: - Возможно ли вообще или рекомендуется поместить мою инфраструктуру Entity Framework в этот другой проект? - Буду ли я жертвовать некоторыми другими функциями MVC, разделив его таким образом? (например, валидация?) - Если я направляюсь в правильном направлении, а другие согласны, есть ли какие-либо другие примеры или документы, на которые меня могли бы навестить?

ответ

1

Да, я думаю, что это хорошая идея поместить ваши объекты в отдельную сборку.

Один из способов исправить «Невозможно загрузить указанный ресурс метаданных» ошибка заключается в определении сборки в строке соединения в явном виде:

<connectionStrings> 
    <add name="MyEntities" connectionString="metadata=res://*/AssemblyName.bin.Namespace.MyEntities.csdl|res://*/AssemblyName.bin.Namespace.MyEntities.ssdl|res://*/AssemblyName.bin.Namespace.MyEntities.msl;provider=System.Data.SqlClient;provider connection string=&quot;Data Source=SERVER_NAME;Initial Catalog=DBName;Integrated Security=True;MultipleActiveResultSets=True&quot;" providerName="System.Data.EntityClient"/> 
</connectionStrings> 

Обратите внимание, тем более, AssemblyName.bin.Namespace.MyEntities. Это имя ресурса сборки квалифицирован (при условии сборки называется «AssemblyName.dll». Вы, возможно, придется использовать отражатель, чтобы понять это в первый раз, когда вы делаете это.

This answer также может быть полезным.

+0

Superb - спасибо:> все еще получаю ошибку, хотя. Поиграет еще немного. Приветствия. – Wolo

0

Конечно, можно поместить определение Entity Framework в другой проект. Лично я сохраняю его в другом проекте, если слой данных нужно будет использовать несколькими интерфейсами (MVC, WCF, WPF).

Посмотрите в этих двух статьях MSDN по созданию и использованию EntityConnection.

Build an EntityConnection

Use EntityConnection with an Object Context

Смежные вопросы