Как MS Entity Framework отображает концептуальную модель на типы CLR? - PullRequest
2 голосов
/ 19 августа 2010

Учитывая модель данных объекта (EDMX) со «стратегией генерации кода», установленной на «Нет», как EF определяет, с какими типами CLR сопоставить концептуальную модель?

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

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

Отображение типа CLR в тип EDM неоднозначно, потому что несколько типов CLR соответствует типу EDM SomeType. Ранее найденный тип CLR 'SomeNamespace.SomeType', недавно найденный Тип CLR 'SomeNamespace.POCO.SomeType'

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

Спасибо.

1 Ответ

4 голосов
/ 19 августа 2010

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

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

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

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

Джефф

См. Эту статью: текст ссылки

...