EF4 постепенно выходят, отображение вводит то же имя тот же блок различные пространства имен

Я испытываю проблему с EF4 и Pocos Прокси.

У меня есть 2 класса с тем же именем в том же блоке, но различных пространствах имен:

QuoteModels.CashPayment
OrderModels.CashPayment

Это компилирует прекрасный, но в EF во время выполнения выдает следующее исключение:

Указанная схема не действительна. Ошибки: отображение \r\nThe типа CLR к типу EDM неоднозначно, потому что несколько типов CLR соответствуют типу EDM 'CashPayment'. Ранее найденный CLR вводит 'QuoteModels. CashPayment', недавно нашел тип CLR 'OrderModels. CashPayment'

Существует ли обходное решение, чтобы иметь классы с тем же именем в том же блоке с различными пространствами имен для работы с Ef4?

Я должен дать им различные имена или переместить их в другой блок?

23
задан Ken Burkhardt 28 July 2010 в 14:56
поделиться

2 ответа

Посмотрите на этот пост. Комментарий Дерека, похоже, касается того же вопроса, и он не получил никакого ответа от Microsoft.

3
ответ дан 29 November 2019 в 03:06
поделиться

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

Краткий ответ: Просто переименуйте один или оба неоднозначных объекта, например: 2x Person переименованы в: Personal_Person и Work_Person на основе PersonalContext и WorkContext .

Длинный ответ: В нашем сценарии мы используем подход «сначала БД» (мы переписываем устаревшее приложение с минимальными изменениями в БД). Наша БД содержит сотни таблиц, поэтому вместо использования одного EDMX / контекста я использую несколько EDMX / контекстов (EDMX срывался каждый раз, когда я пытался добавить более половины наших таблиц). Однако некоторые таблицы должны существовать более чем в одном EDMX / контексте.

Для обсуждения давайте представим, что у нас есть простая база данных со следующими таблицами:

  • Человек
  • Семья
  • Отношения
  • Адрес
  • Бизнес
  • Сотрудник

Также для удобства В этом обсуждении давайте предположим, что ЛЮБАЯ таблица, которая существует в нескольких контекстах, вызывает эту проблему (как я сказал в комментариях к ответу Деварта, это не совсем так, и я не понимаю, почему это иногда работает).

Теперь предположим, что мы хотим создать два контекста:

PersonalContext :

  • Person
  • Family
  • Relationship
  • Address

WorkContext :

  • Person
  • Рабочий
  • Адрес
  • Сотрудник

В этом сценарии и Человек , и Адрес вызовут нашу проблему. Поэтому в нашем сопоставлении EDMX мы просто переименуем наши объекты в Personal_Person / Work_Person и Personal_Address / Work_Address .

Как уже говорилось, это очень очевидный обходной путь, который не идеален, но поскольку EF не принимает во внимание пространство имен и идет строго по имени (не истинная идентичность, просто имя), один из вариантов - поставить ваше пространство имен внутри вашего имени.

Сейчас я все еще обсуждаю, собираюсь ли я сделать это таким образом или, возможно, пространство имен для каждой сущности ( Personal_Person , Personal_Family , Personal_Relationship ], Personal_Address и Work_Person , Work_Business , Work_Address и Work_Employee ) для согласованности и удобства использования Intellisense. (сохраняя все сущности в правильном алфавитном порядке), поскольку на самом деле пространство имен принадлежит до имени, а не после него, но это суждение и не очень важно для решения проблемы.

Надеюсь, это поможет !!

12
ответ дан 29 November 2019 в 03:06
поделиться
Другие вопросы по тегам:

Похожие вопросы: