我有一个类似的模型:
背景:这个想法是它是一个样本数据库。一个样本有细节,几个样本可以一起整理成一个CollatedSample,细节也可以一起整理到一个CollatedDetail中。所以,一个 CollatedSample 有很多 CollatedDetails,从很多 Samples 开始,每个 Samples 都有很多 Details。CollatedDetail 也有很多细节。这是一个“漂亮”的广场。
因此,我添加记录的方法是:
var sample = new Sample();
var detail = new Detail();
sample.Details.Add(detail);
// suppose I add a bit more meat to these entities...
var collatedSample = new CollatedSample();
var collatedDetail = new CollatedDetail();
collatedSample.Samples.Add(sample);
collatedSample.CollatedDetails.Add(collatedDetail);
collatedDetail.Details.Add(detail);
context.CollatedSamples.AddObject(collatedSample);
context.SaveChanges();
因此,我将所有元素相互添加,并将详细信息添加到 Sample 和 CollatedDetail。在 SaveChanges 上,我收到一条带有快乐消息的更新异常:
无法确定“SamplingModel.FK_Detail_CollatedDetailId”关系的主体端。多个添加的实体可能具有相同的主键。
我认为可能真正发生的是在记录 CollatedDetail 之前尝试记录 Detail 实体。该 Detail 表具有两个关系,是导致问题的一个(没有将它们添加到 Sample 或 CollatedDetail 确认它)。也许有一种方法可以指定插入顺序?我也尝试了相反的方法,设置父集合而不是在子集合上使用.Add()
,结果相同。否则,我如何一次完成这种两管齐下的插入?
编辑:tl;博士: