评估实体框架属性仅适用于第二次

时间:2013-05-24 15:04:19

标签: entity-framework

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

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中搜索类似的问题,但我找不到这样的东西。当然我不是第一个遇到这个问题的人吗?

0 个答案:

没有答案