Исключение Entity Framework: найдено неоднозначное совпадение

Я получаю сообщение об ошибке:

Найдено неоднозначное совпадение

Во время этого кода на .Add

var db = new NexusEntities(); 
db.Reports.Add(mmr);

При поиске в Google возникает проблема, если есть два класса с одинаковым именем, но в разных пространствах имен. Насколько я могу судить, это не так... Есть ли другая причина возникновения этой ошибки? Или есть способ узнать, какой параметр он находит два?


person Kyle    schedule 15.08.2013    source источник
comment
Какой тип mmr? И что за тип Reports?   -  person zs2020    schedule 15.08.2013
comment
Отчеты — это тип Reports, который является абстрактным классом. mmr — это тип MonthlyMarketingReport, который имеет базовый класс Reports.   -  person Kyle    schedule 15.08.2013
comment
Трудно увидеть без кода в отчетах сущностей и MonthlyMarketingReport. Вы делаете что-нибудь необычное, скрывая свойства и т. д.? обратитесь к этому вопросу   -  person SteveChapman    schedule 15.08.2013
comment
Это вся ошибка? Это ошибка компиляции или выполнения?   -  person CodeCaster    schedule 15.08.2013
comment
@CodeCaster Полная ошибка, время выполнения.   -  person Kyle    schedule 16.08.2013


Ответы (2)


Это "слабая сторона" EF. Это происходит, когда одно и то же свойство появляется в иерархии классов/подтипов.

Скорее всего у вас есть скрытое поле. то есть свойство, которое было переопределено. Когда EF ищет свойство, он также должен использовать тип/базовое дерево для поиска свойства. Но если он находит его дважды в дереве, он интерпретирует это как дубликат. EF не просто использует самое низкое наиболее конкретное переопределение.

Таким образом, скрытие свойств невозможно с EF.

Проверьте свои классы, свойство где-то встречается дважды.

person phil soady    schedule 15.08.2013
comment
Есть ли простой способ найти, какое свойство? - person Kirsten Greed; 22.04.2015
comment
@ Кирстен... не то чтобы я в курсе - person phil soady; 22.04.2015
comment
Я обнаружил, что предупреждения компилятора помогли мне определить, где была похожая проблема. - person Kirsten Greed; 22.04.2015
comment
@kirsteng и все, кто столкнулся с этой проблемой, простой способ определить свойство проблемы: когда возникает исключение, перейдите в окно стека вызовов, щелкните правой кнопкой мыши -> показать внешний код, щелкните правой кнопкой мыши -> показать значения параметров, затем просмотрите стек для подсказок. Мой был третьим сверху (propertyOrFieldName): System.Core.dll!System.Linq.Expressions.Expression.PropertyOrField(System.Linq.Expressions.Expression expression = {System.Linq.Expressions.UnaryExpression}, string propertyOrFieldName = "Country_State") Unknown - person Tyson; 03.06.2015
comment
Чтобы найти свойство, вызывающее проблему, я воспользовался Linqpad и начал перечислять 100 лучших классов каждого типа. Это в конечном итоге покажет, какой класс вызывает проблему. - person Steven T. Cramer; 28.09.2015
comment
Это случилось со мной, когда недвижимость была одинаковой, но капитализация отличалась. - person TWilly; 01.06.2016

Хотя это, вероятно, гораздо менее вероятный сценарий, но мы использовали EF Core 1.0, у которого была только одна версия метода Include()... в версии 1.1 Microsoft добавила вторую реализацию (строковую версию), и поскольку мы вызывали этот метод динамически, мы получил эту ошибку после обновления нашего EF Core до 1.1

person Serj Sagan    schedule 30.01.2017