1

使用代码优先,我定义了一个关系:

modelBuilder.Entity<ChildObject>()
    .HasRequired(child => child.ParentObject)
    .WithMany()
    .WillCascadeOnDelete(false);

我可以从此类中读取其他一对多属性。不幸的是,当我尝试从中读取值时child.ParentObject,它会引发此异常:

发生关系多重性约束违规:EntityReference 不能有多个相关对象,但查询返回多个相关对象。这是一个不可恢复的错误。

我不完全确定该错误是如何发生的,因为它似乎生成了正确的架构:

CREATE TABLE [dbo].[ChildObject]
(
    [ID] [int] IDENTITY(1,1) NOT NULL,
    [Name] [nvarchar](128) NOT NULL,
    [ParentObject_ID] [int] NOT NULL,
);

CREATE TABLE [dbo].[ParentObject]
(
    [ID] [int] IDENTITY(1,1) NOT NULL,
    [Name] [nvarchar](255) NOT NULL,
);

然而,我发现如果我在调试器中评估这个表达式一次,导致调试器捕获错误,剃刀页面将正常呈现。所以我惊恐地意识到我可以这样做:

@try
{
    @(this.Model.ParentRecord.Name)
}
catch (InvalidOperationException)
{
    @(this.Model.ParentRecord.Name)
}

当然,这绝对是荒谬的,如果我真的尝试将它合并到主开发分支中,我将成为下一次代码审查的笑柄。这种不一致的行为看起来很像错误,我想学习如何解决它。我尝试在 Microsoft Connect 中搜索类似问题,但找不到类似的问题。当然我不是第一个遇到这个问题的人吗?

4

0 回答 0