2

我有一个实体,它的主键为 int,主键设置为 storegeneratedpattern = none,以便我们提供 id 客户端。

该实体具有通过与导航和外键 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,即看起来修复发生在保存之后。

我在这里想念什么?如果引擎的存储生成模式是身份,这一切都很好。

4

2 回答 2

0

我认为,如果您要为引擎创建自己的 ID,那么您也必须为零件创建它。

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

part.engineid = 6

engine.Parts.Add(part);
engine.Id = 6;
engineRepository.Save(engine);
于 2013-06-29T18:25:48.483 回答
0

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

于 2013-07-18T12:46:00.693 回答