MVC 2 и Entity Framework. Должен ли я поместить Entity в отдельный слой? - PullRequest
4 голосов
/ 09 марта 2010

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

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

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

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

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

если у меня нет копии модели Entity Data в моем проекте MVC.

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

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

Ответы [ 2 ]

1 голос
/ 09 марта 2010

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

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

<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). Возможно, вам понадобится использовать Reflector, чтобы выяснить это в первый раз, когда вы это сделаете.

Этот ответ также может быть полезен.

0 голосов
/ 09 марта 2010

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

Взгляните на эти две статьи MSDN о создании и использовании EntityConnection.

Создание EntityConnection

Использовать EntityConnection с контекстом объекта

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...