我的情况很简单。我有3个对象:
TrainingConsultant
的对象Training
为EntityState
的名为Detatched
的对象。Consultant
的对象,其EntityState
为Detatched
。我需要用引用的TrainingConsultant
和Consultant
保存Training
对象,以便在数据库中正确填写所有必填字段和外键。
问题是,在我调用context.TrainingConsultants.AddObject(trainingConsultant);
之前,所有组件都处于Detached
状态。之后,training
和consultant
的EntityState
都更改为Added
,因此context.SaveChanges()
尝试在添加training
之前将consultant
和traingingConsultant
都添加到数据库中。它失败是因为数据库中已经存在Consultant
,consultant
也已经存在。
如何解决此问题,以便Consultant
和Training
都不会被保存,但仍会被引用?请记住,我在代码中的其他位置分配了这2个引用的对象:
trainingConsultant.Training = training;
trainingConsultant.Consultant = consultant;
因此,保存任何更改都需要我临时保存对象,然后将TrainingConsultant.Training
和TrainingConsultant.Consultant
设置为null
?
using (var context = new Entity(Settings.sqlDataConnectionDetails))
{
context.TrainingConsultants.AddObject(trainingConsultant);
context.SaveChanges();
}
您应该仅通过ID指定而不是附加实体:
trainingConsultant.TrainingId = training.Id;
trainingConsultant.ConsultantId = consultant.Id;
context.TrainingConsultants.AddObject(trainingConsultant);
context.SaveChanges();
您可以根据需要进行调整以匹配您的字段/列名称。