【发布时间】:2010-11-10 13:48:45
【问题描述】:
这是场景:
- VS 2008 .NET
- 3.5 SP1
- LINQ to SQL
我有一个产品实体,它有一个 ImageID 字段,因此它与图像实体有关系。这都是在模式和 DBML 中定义的。
现在,假设我创建了一个没有 ImageID 的新产品实体,并将其保存到数据库中。此时,Entity 的 _Image 字段已将 HasLoadedOrAssignedValue 设置为 false,这是应该的。
现在,当我从数据库中检索该实体时,没有 ImageID,即 ImageID 设置为 null,并且附加到它的 Image Entity 也设置为 null,HasLoadedOrAssignedValue 设置为 true。为什么?
现在,当我尝试将 ImageID 属性设置为有效的 int 时,我得到了 ForeignKeyReferenceAlreadyHasValueException 异常。
现在,我知道有人说,“哦,你必须自己设置关系属性,所以 Product.Image = someImage,而不是 Product.ImageID = 2”,但我总是设置 ID 字段,而且总是有效...嗯,几乎总是这样。
所以,我的问题是双重的:
- 为什么 HasLoadedOrAssignedValue 不应该设置为 true?
- 更重要的是,为什么我会遇到这种不连贯的行为。我知道你不必总是直接设置实体属性,那为什么这次不行呢?如果这是一条 LINQ to SQL 规则,那为什么有时会破坏这条规则?
【问题讨论】:
-
问题:您是明确将 ID 设置为 null,还是没有设置? ImageID 是 Image 的 PK 且不可为空吗?如果设置图像对象,它会起作用吗?我知道这不是您想要做的,但确定这是否有效将缩小您的潜在原因列表。如果不了解更多细节,1 和 2 很难回答。
标签: .net linq-to-sql .net-3.5