如何防止Entity Framework在SaveChanges上向数据库添加引用的对象?

问题描述 投票:1回答:1

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

  • 尚未保存到数据库的名为TrainingConsultant的对象
  • 最近被保存到数据库且其TrainingEntityState的名为Detatched的对象。
  • 最近从数据库中加载的名为Consultant的对象,其EntityStateDetatched

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

问题是,在我调用context.TrainingConsultants.AddObject(trainingConsultant);之前,所有组件都处于Detached状态。之后,trainingconsultantEntityState都更改为Added,因此context.SaveChanges()尝试在添加training之前将consultanttraingingConsultant都添加到数据库中。它失败是因为数据库中已经存在Consultantconsultant也已经存在。

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

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

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

using (var context = new Entity(Settings.sqlDataConnectionDetails))
{
    context.TrainingConsultants.AddObject(trainingConsultant);
    context.SaveChanges();
}
c# entity-framework-4
1个回答
1
投票

您应该仅通过ID指定而不是附加实体:

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

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

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

© www.soinside.com 2019 - 2024. All rights reserved.