为什么将HasLoadedOrAssignedValue属性设置为true?

and*_*ndy 5 .net .net-3.5 linq-to-sql

嘿,好,这是场景:

VS 2008 .NET 3.5 SP1,LINQ to SQL

我有一个产品实体,该实体具有一个ImageID字段,因此它与该图像实体有关系。所有这些都在模式和DBML中定义。

现在,假设我创建一个没有ImageID的新Product实体,并将其保存到DB。此时,实体的_Image字段已将HasLoadedOrAssignedValue设置为false。

现在,当我从数据库中检索该实体时,没有ImageID,即ImageID设置为null,并且附加给它的Image Entity也设置为null,HasLoadedOrAssignedValue设置为true。

现在,当我尝试将ImageID属性设置为有效的int时,我得到了ForeignKeyReferenceAlreadyHasValueException异常。

现在,我知道人们会说:“哦,您必须设置关系属性本身,因此,Product.Image = someImage,而不是Product.ImageID = 2”,但是我总是设置ID字段,并且它始终有效。 ..好吧,几乎总是

因此,我的问题是双重的:

  1. 为什么在不应该将HasLoadedOrAssignedValue设置为true时
  2. 更重要的是,为什么我会经历这种不一致的行为。我知道您不必总是直接设置实体属性,那么为什么这次不起作用?如果这是LINQ to SQL规则,那么为什么有时会破坏该规则?

干杯!

Dam*_*enG 3

问题是某些东西正在查看 Image 属性并导致其加载 - 甚至可能是调试器。

在 Product.Image 属性中设置断点并查看导致该断点的路径。