У нас есть хранимая процедура, в которой есть оператор выбора:
select convert(int, c.ID) as ID,
convert(nvarchar(255), c.name) as name,
convert(varchar(32), a.state) as state
from customer c join address a on
c.addressid = a.ID
where c.name like @custNameSpec
При выполнении в окне T-SQL создаются две записи:
ID Name State
1 Robert PA
2 Rob VA
При выполнении вEntity Framework 4 в качестве функции импорта возвращает две записи, но первая запись дублируется:
ID Name State
1 Robert PA
1 Robert PA
Мы удалили функцию импорта и импортированную функцию, воссоздали ее и т. Д. Мы также добавили эти преобразования SQLПриведенные выше операторы () гарантируют, что Entity Framework понимает типы данных, возвращаемые с сервера.
Что мы можем сделать, чтобы это исправить?Что вызывает подобные дубликаты?
Наши тесты включают:
var myresult3 = myUOW.DC.GetAdDir(todaysdate: null, store_nbr: 14,
adtype: null).ToList();
var myresult4 = DB.GetAdDir(todaysdate: null, store_nbr: 14,
adtype: null).ToList();
Оба возвращают одинаковый неверный результат.Профилировщик SQL показывает этот вызов:
exec [dbo].[GetCust] @todaysdate=NULL,@custNameSpec='Rob',@adtype=NULL
РЕДАКТИРОВАТЬ:
Видимо, бизнес-правила изменились.POCO, сгенерированный из Entity Framework, неправильно установил первичный ключ, поэтому он вернул правильное количество полей, но «удалил» дубликаты, сделав все дубликаты одинаковыми (на основе полей первичного ключа POCO.)
ТамMergeOption
упоминался в других удаленно связанных вопросах, которые могут объяснить, почему это происходит.