2010-08-19 2 views
2

Учитывая, что модель данных сущности (EDMX) с «Стратегия генерации кода» установлена ​​в «Нет», как EF определяет, какие типы CLR отображать концептуальную модель?Как MS Entity Framework сопоставляет концептуальную модель с типами CLR?

Я думаю, что я где-то читал, что он просто исследует сборку для типов, которые соответствуют концептуальной модели, но это было в отношении выпуска CTP EF. Это все еще так? Могу ли я контролировать этот процесс?

В частности, я в ситуации, когда я перемещаю существенную базу кода с помощью Linq2SQL на использование POCO с EF 4.0. Таким образом, у меня есть классы Linq2SQL, а также классы POCO, которые теперь находятся в одной и той же сборке, но в разных пространствах имен. Я пытаюсь добиться плавной миграции из L2S в EF, поэтому я хотел бы, чтобы две структуры работали параллельно. Тем не менее, я получаю во время выполнения-ошибка говоря

отображения типа CLR для типа EDM является неоднозначными, поскольку несколько типов CLR совпадают с «SomeType» типа EDM. Ранее нашли тип CLR 'SomeNamespace.SomeType', недавно нашел тип CLR 'SomeNamespace.POCO.SomeType'

где SomeNamespace это пространство имен сущностей L2S. Эта ошибка имеет смысл, если EF просто исследует все типы, соответствующие концептуальной модели. Могу ли я ограничить EF, чтобы исследовать пространство имен SomeNamespace.POCO? Или я должен помещать объекты POCO в другую сборку? Или я должен принять третий подход?

спасибо.

ответ

4

Обратите внимание на этот комментарий из ADO.NET блога команды:

Джефф 25 февраля 2010 9:10 утра @Derek

Это намеренно. Вы можете поместить свои классы POCO в любое пространство имен , которое вы хотели бы. Entity Framework by механизм соглашения для обнаружения , свойства которого на объекте совпадают свойства объектов в вашей модели не используют пространство имен. Что имеет значение , так это то, что имя типа (без пространства имен ) соответствует имени EntityType в вашей модели (файл edmx/csdl).

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

Джефф

Смотрите эту статью: link text