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;