2012-03-27 47 views
2

我有一个数据库,其中包含一个由另一个表引用的简单flyweight表。我们分别称之为类别和产品。Linq - 出现意外的唯一性约束类型的行为

Product表中有几列,其中一列是CategoryID表的CategoryID的外键列(带约束完成)。这很简单,我在这个特定的数据库中有很多。

我在Visual Studio 2008中使用Linq在我的应用程序中表示此数据。这两个表都是正常的,并且它们的属性中都没有任何特殊的含义,可以表明我将描述的行为。

在数据库本身中,有几个产品行具有CategoryID=1。有两个或三个有CategoryID=2。然而,当通过Linq将数据加载到我的应用程序中时,通过context.Products重复显示前三个具有CategoryID=1,CategoryID=2CategoryID=3,并且其余所有行都具有CategoryID=NULL。这不是它在数据库中的显示方式。此数据库中没有其他异常情况。

帮助?

编辑:我已经在下面发布了一个答案,但也许DevExpress家伙可以参加?我很高兴它现在能够正常工作,但我不高兴我仍然不明白哪里出了问题。

+0

生成的SQL看起来像什么? – 2012-03-27 05:20:48

+0

@JonSkeet'SELECT [t0] .ProductID,[t0] .Description,[t0] .CategoryID FROM dbo.Product AS [t0]' - 没有什么不寻常的。 Debug Visualiser返回的集合具有所有正确的数据,但是当我遍历它(或将其设置为网格的DataSource)时,它突然变得不正确。 – 2012-03-27 05:48:24

+0

这似乎不太可能会导致错误的数据......您如何诊断数据在您的应用程序中是错误的?你有没有试过一个小的控制台应用程序,只是获取数据并打印出来? (如果是这样,你可以发布该应用程序吗?) – 2012-03-27 05:50:25

回答

0

的答案在这里有两个:

  1. 我再生的DBML文件中的整个数据库。这样修复了我在遍历查询时显示的错误数据,但是当我尝试将该数据放入网格时,数据仍然不正确。

  2. 我在做第1步之前创建了一个新列,并且数据显示不正确。完成步骤1后,此新列中的数据(仅映射到CategoryID)正确显示。但是,原始列中的数据(映射到实体Category)仍然像最初描述的那样运行。一旦我将字段从Category更改为CategoryID,行为就停止了。我仍然不确定发生了什么,但至少现在我有一个修复。

感谢您的帮助,@JonSkeet。 :)