2013-06-27 32 views
2

我有一个实体,它的主关键字int设置为storegeneratedpattern = none,因此我们提供了id客户端。具有storegeneratedpattern = none的实体框架4实体在保存时不会更新外键

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

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

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

的保存很简单

Context.Engines.AddObject(entity); 
Context.SaveChanges(); 

保存后 “部分” 将有一个外键 “ENGINEID”= 6,但在数据库中这将是 “ENGINEID” = 0,即看起来修复发生在保存之后。

我在这里错过了什么?如果引擎的存储生成模式是身份认证,则一切正常。

回答

0

在这种情况下,分辨率似乎是您保存图形两次,一次创建修复起来,一次保存修复起来。这不是一个好的解决方案,我仍然不明白为什么我们必须这样做,但至少这意味着我们可以让EF处理id分辨率。

0

我认为如果您要为引擎创建自己的ID,则还必须为该部分创建它。

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

part.engineid = 6 

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

这是一种可能性,但它意味着整个汽车修复EF的好处被否定。实际上,我们有一个巨大的图表,必须走整个过程来设置所有适当的ID。我提供了我们最终在下面使用的答案。 –