Я нашел обходной путь.Это очень очевидный обходной путь, который не идеален, но я думаю, что я буду называть его достаточно хорошим для нас, пока не выйдет EF5, чтобы это исправить.
Краткий ответ: Просто переименуйте одно или оба неоднозначных объекта. Например: 2x Person
переименованы в: Personal_Person
и Work_Person
на основе PersonalContext
и WorkContext
.
Длинный ответ: В нашем сценарии мы используем подход, основанный на DB (мы переписываем устаревшее приложение с минимальными изменениями в DB).Наша БД содержит сотни таблиц, поэтому вместо использования одного EDMX / Context я использую несколько EDMX / Contextxts (EDMX квакает каждый раз, когда я пытался добавить более половины наших таблиц).Однако некоторые таблицы должны существовать в нескольких EDMX / Context.
Давайте обсудим, что у нас есть простая база данных со следующими таблицами:
Person
Family
Relationship
Address
Business
Employee
Кроме того, ради этого обсуждения давайте предположим, что ЛЮБАЯ таблица, которая существует в нескольких контекстах, вызывает эту проблему (как я уже говорил в комментариях к ответу Деварта, это не совсем так, и я не понимаю, почему это иногда работает).
Теперь предположим, что мы хотим создать два контекста:
PersonalContext
:
Person
Family
Relationship
Address
WorkContext
:
Person
Business
Address
Employee
В этом сценарии и Person
, и Address
вызовут нашу проблему.Итак, что мы будем делать в нашем отображении 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-содружественности (сохраняя все сущности в правильном алфавитном порядке), так как на самом деле пространство имен принадлежит перед именем, а не после него, но это суждение и не очень важно для решения проблемы.
Надеюсь, это поможет !!