Entity framework 4 实体框架4 storegeneratedpattern=none的实体不';保存时不更新外键

Entity framework 4 实体框架4 storegeneratedpattern=none的实体不';保存时不更新外键,entity-framework-4,fixup,Entity Framework 4,Fixup,我有一个实体,它的主键是int,设置为storegeneratedpattern=none,这样我们就可以在客户端提供id 此实体具有通过与导航和外键id的关联引用回它的子实体 如果我创建一个新的父实体并添加一个子实体,然后设置父实体主键并保存,则子实体外键的修复将在保存之后进行,并且不会持久化到数据库中 乙二醇 节约很简单 Context.Engines.AddObject(entity); Context.SaveChanges(); 保存后,“part”将有一个外键“EngineId”=

我有一个实体,它的主键是int,设置为storegeneratedpattern=none,这样我们就可以在客户端提供id

此实体具有通过与导航和外键id的关联引用回它的子实体

如果我创建一个新的父实体并添加一个子实体,然后设置父实体主键并保存,则子实体外键的修复将在保存之后进行,并且不会持久化到数据库中

乙二醇

节约很简单

Context.Engines.AddObject(entity);
Context.SaveChanges();
保存后,“part”将有一个外键“EngineId”=6,但在数据库中它将是“EngineId”=0,即修复似乎发生在保存后


我错过了什么?如果引擎的storegeneratedpattern是identity,那么一切都可以正常工作。

我认为如果要为引擎创建自己的Id,也必须为零件创建Id

engine = new Engine();
part = new Part();

part.engineid = 6

engine.Parts.Add(part);
engine.Id = 6;
engineRepository.Save(engine);

本例中的解决方案似乎是保存图形两次,一次用于创建修复,一次用于保存修复。这不是一个很好的解决方案,我仍然不明白我们为什么要这么做,但至少这意味着我们可以让EF处理id分辨率。

这是一种可能性,但这意味着EF的整个自动修复好处被否定了。实际上,我们有一个巨大的图形,必须遍历整个过程来设置所有适当的ID。我在下面提供了我们最终使用的答案。
engine = new Engine();
part = new Part();

part.engineid = 6

engine.Parts.Add(part);
engine.Id = 6;
engineRepository.Save(engine);