Как поддерживать несколько моделей Entity Framework в одном решении - PullRequest
11 голосов
/ 05 октября 2009

Я начал разработку приложения с использованием Entity Framework.

Я добавил пространство имен, чтобы содержать, например, весь мой код управления пользователями MyApp.Users, и оно содержит модель, помеченную как внутреннюю для пространства имен и предоставляющую функциональность только остальной части системы через интерфейсы. Это все хорошо.

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

«EdmType не может быть сопоставлен с классами CLR несколько раз»

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

Кто-нибудь видел эту проблему и, возможно, выяснил, как позволить одной и той же таблице существовать в разных моделях?

В качестве альтернативы - представляет ли это какой-то анти-шаблон Entity Framework, которого мне следует избегать?

Ответы [ 2 ]

8 голосов
/ 05 октября 2009

Чтобы повторно использовать типы в нескольких моделях, необходимо выполнить некоторые определенные шаги, описанные в этом сообщении в блоге . Как и многие другие расширенные возможности Entity Framework, это работает, но не очень хорошо работает с дизайнером GUI. См. Также это вступительное сообщение для получения дополнительных идей о работе с большими моделями.

4 голосов
/ 05 октября 2009

У вас может быть несколько моделей, но они не могут перекрываться . Сообщение об ошибке довольно ясно - если они перекрываются, как EF узнает, к какому типу CLR сопоставляться - на самом деле это невозможно сказать.

В вашем случае вы могли бы попытаться извлечь таблицу Users в третью собственную модель, если ее необходимо использовать и в двух других местах.

Марк

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