如何防止Entity Framework中的SaveChanges尝试将引用的对象添加到数据库

时间:2012-02-01 21:53:14

标签: c# winforms entity-framework-4

我的情况非常简单。我有3个对象:

  • 一个名为TrainingConsultant的对象尚未保存到数据库
  • 最近保存到数据库的名为Training的对象,EntityStateDetatched
  • 一个名为“顾问”的对象,最近从数据库加载,EntityStateDetatched

我需要使用引用的TrainingConsultantConsultant保存Training对象,以便在数据库中正确填写所有必需的字段和外键。

问题是,在我调用context.TrainingConsultants.AddObject(trainingConsultant);之前,所有内容都处于分离状态。之后,培训和顾问都将其EntityState更改为“已添加”,以便context.SaveChanges()尝试在添加training之前将consultanttraingingConsultant添加到数据库。它失败是因为Consultant已存在于数据库中,`consultant。

也是如此

我如何解决此问题,以便顾问和培训都不会得到保存但仍会被引用?请记住,我在代码中的其他位置分配了这两个引用的对象:

 trainingConsultant.Training = training;
 trainingConsultant.Consultant = consultant;

因此,在保存任何更改时,我需要临时保存对象,然后在null对象中将.Training设置为.Consultant TrainingConsultant

using (var context = new Entity(Settings.sqlDataConnectionDetails)) {

   context.TrainingConsultants.AddObject(trainingConsultant);
   context.SaveChanges();
}

1 个答案:

答案 0 :(得分:1)

您应该只按ID指定而不是附加实体:

trainingConsultant.TrainingId = training.Id;
trainingConsultant.ConsultantId = consultant.Id;

context.TrainingConsultants.AddObject(trainingConsultant);
context.SaveChanges();

您可以根据需要进行调整,以匹配您的字段/列名称。