2012-03-27 5 views
2

У меня есть база данных с простой таблицей мухи, на которую ссылается другая таблица. Назовем их соответственно категориями и товарами.Linq - Непредвиденное поведение типа ограничения уникальности

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

Я использую Linq в Visual Studio 2008 для представления этих данных в своем приложении. Обе таблицы выглядят как обычные, и у них нет ничего особенного в своих свойствах, которые бы указывали на поведение, которое я опишу.

В самой базе данных имеется несколько рядов продуктов, которые имеют CategoryID=1. Есть два или три, которые имеют CategoryID=2. Однако, когда данные загружаются в мое приложение через Linq, итерация через context.Products показывает, что первые три имеют CategoryID=1, CategoryID=2 и CategoryID=3, а все остальные строки имеют CategoryID=NULL. Это не то, как оно появляется в базе данных. Других аномалий в этой базе данных нет.

Помощь?

Редактировать: Я написал ответ ниже, но, может быть, ребята из DevExpress могут прослушивать? Я счастлив, что теперь он работает правильно, но я не доволен, что до сих пор не понимаю, что пошло не так.

+0

Как выглядит сгенерированный SQL? –

+0

@JonSkeet 'SELECT [t0] .ProductID, [t0] .Описание, [t0] .CategoryID FROM dbo.Product AS [t0]' - ничего необычного. В коллекции, возвращаемой Debug Visualiser, есть все правильные данные, но когда я повторяю ее (или устанавливаю ее как источник данных сетки), она становится неверной. –

+0

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

ответ

0

Ответа здесь был двояким:

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

  2. Я сделал новый столбец перед тем, как сделать шаг 1, и данные отображаются неверно. После выполнения шага 1 данные в этом новом столбце (отображаются только на CategoryID) отображаются правильно. Однако данные в исходном столбце (сопоставлены с объектом Category) все еще ведут себя, как описано выше. Как только я сменил поле с Category на CategoryID, поведение остановилось. Я все еще не уверен, почему это произошло, но по крайней мере сейчас у меня есть исправление.

Благодарим за помощь, @JonSkeet. :)

Смежные вопросы