Изключение от Entity Framework: Намерено е двусмислено съвпадение

Получавам грешката:

Намерено е двусмислено съвпадение

По време на този код на .Add

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

От гугъл изглежда, че е проблем, ако има два класа с едно и също име, но в различни пространства от имена. Доколкото мога да кажа, това не е така... Има ли друга причина, поради която може да се случи тази грешка? Или има начин да се каже кой параметър намира две?


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
Трудно е да се види без кода в обектите Report & 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 търси свойството a, той също трябва да използва тип/базово дърво, за да намери свойството. Но ако го намери два пъти в дървото, той интерпретира това като дубликат. EF не използва само най-ниското най-специфично заместване.

Така че скриването на собственост не е възможно с EF.

Проверете вашите класове, свойство ще се появи два пъти някъде.

person phil soady    schedule 15.08.2013
comment
Има ли лесен начин да намерите кой имот? - person Kirsten Greed; 22.04.2015
comment
@ Kirsten... не доколкото знам - person phil soady; 22.04.2015
comment
Открих, че предупрежденията на компилатора ми помогнаха да изолирам къде е моят подобен проблем - person Kirsten Greed; 22.04.2015
comment
@kirsteng и всеки друг, който се сблъсква с този проблем, лесен начин за изработване на проблемното свойство: когато е хвърлено изключение, отидете в прозореца на стека на повикванията, щракнете с десния бутон -› показване на външен код, щракнете с десния бутон -› показване на стойностите на параметрите, след което прегледайте стека за подсказки. Моят беше 3-ти отгоре (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