首先使用代码,我定义了一个关系:
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中搜索类似的问题,但我找不到这样的东西。当然我不是第一个遇到这个问题的人吗?