C# 为什么EF在未添加实体状态时不更新FK列?

C# 为什么EF在未添加实体状态时不更新FK列?,c#,.net,entity-framework,ef-code-first,entity-framework-5,C#,.net,Entity Framework,Ef Code First,Entity Framework 5,我有这样的实体: public class Entity1 { public short Id { get; set; } public int Entity2Id { get; set; } public virtual Entity2 Entity2 { get; set; } } 并且有这样一对多的关系: this.HasRequired(m => m.Entity2) .WithMany

我有这样的实体:

 public class Entity1
    {
        public short Id { get; set; }
        public int Entity2Id { get; set; }
        public virtual Entity2 Entity2 { get; set; }
    }
并且有这样一对多的关系:

  this.HasRequired(m => m.Entity2)
            .WithMany()
            .HasForeignKey(m => m.Entity2Id)
            .WillCascadeOnDelete(false);
以下是我无法理解的想法:

例如,如果我将实体状态更改为Added First,则evertyhting可以正常工作:

但是,我不想将状态更改为“已添加”,当我删除第一行时,出现以下异常:

发生引用完整性约束冲突:属性 定义引用约束的值不一致 在关系中的主体对象和从属对象之间

因为,entit1.Entity2Id!=entity1.Entity2.Id

而且,我不想手动更改该值

如何在不将状态更改为“已添加”的情况下使其工作

更新:

我对这个问题进行了更多的调查。由此

这称为属性修复,通常由生成的代理自动完成。但是,对于DbContext,情况不再如此。根据这个连接问题,这是经过设计的

您好,DbContext模板实际上不生成 将用作更改跟踪代理-只是延迟加载代理 这不需要修理。我们做出这个决定是因为变更跟踪 代理很复杂,有很多细微差别,可能非常复杂 让开发人员感到困惑。如果您想在之前进行修复 保存更改您可以调用myContext.ChangeTracker.DetectChanges~环境足迹 团队


另一种方法是调用DbContext.Entryentity,它将同步实体。本文介绍了这一点:同步FKs和导航属性之间的更改下的关系和导航属性

您使用的是什么版本的EF?@wahwah我使用的是EF 5.0您看了吗?根据EF配置,您可能需要删除当前上下文并重新运行it@wahwahwah我不明白你的意思。首先,我没有在你的链接中找到任何关于删除上下文的句子。第二个问题是,如果我删除实体,我将丢失所有实体。这两个实体最初都是分离的?
context.Entry(entity1).State = System.Data.EntityState.Added;
entity1.Entity2.Id = 541;

 // Since this line `entity1.Entity2Id` value is 0.
 context.Entry(entity1.Entity2).State = System.Data.EntityState.Unchanged;
 // But now everything is fine, because `entity1.Entity2Id` value is 541 also.

 context.Entry(entity1).State = System.Data.EntityState.Unchanged;