Я надеюсь, что из комментариев я вас правильно понимаю ... Если нет, я обновлю этот ответ.
Во-первых, ваш EntityCollection<Exercise> GetExercises(XElement xml)
не будет работать. Как говорится в сообщении об ошибке, вы не можете создать случайный EntityCollection
следующим образом: EntityCollection
необходимо, чтобы объект был присоединен к контексту, поскольку он автоматически синхронизирует свой список с контекстом. И так как вы не говорите, что прикрепить его где-либо, это не сработает. Единственный способ заставить его работать - это вообще не создавать EntityCollection
.
Ваша void GetExercises(XElement xml, EntityCollection<Exercise> entityCollection)
процедура может работать. Однако вы должны убедиться, что на самом деле есть экземпляр EntityCollection<Exercise>
, чтобы иметь возможность вызывать его. То, как вы создаете свой ExamProduced
объект, к моменту возврата из GetExamProduced
он не привязывается к контексту, поэтому в этот момент невозможно иметь для него свойство EntityCollection<Exercise>
.
Возможно, самый простой способ заставить вещи работать - это передать ваш контекст методу GetExamProduced
и позволить им автоматически присоединиться к контексту. Я предполагаю, что это обычный ObjectContext
, но вы можете обновить его при необходимости:
public ExamProduced GetExamProduced(XElement xml, YourContext context)
{
var examProduced = new ExamProduced()
{
ExamProducedID = (int)xml.Attribute("ExamID"),
Date = (DateTime)xml.Attribute("Date"),
Seed = (int)xml.Attribute("Seed")
};
context.ExamsProduced.Attach(examProduced);
LoadExercises(xml, context, examProduced);
// examProduced.Exercises should be available at this point
return examProduced;
}
public void LoadExercises(XElement xml, YourContext context, ExamProduced examProduced)
{
foreach (var exercise in
from objective in xml.Descendants("Objective")
where (bool)objective.Attribute("Produced")
let id = (int)objective.Attribute("ID")
let id2 = (Objective)entityService.Objectives.Where(o => o.ObjectiveID == id).FirstOrDefault()
select new Exercise
{
ExamProduced = examProduced,
Objective = id2,
MakeUp = ...
Quantify = ...
Score = ...
}))
{
context.Exercises.Attach(exercise);
}
}
Я не знаю, являются ли это новые объекты, которые должны быть добавлены в базу данных, или ожидается, что эти объекты уже существуют в базе данных. Я предположил последнее. Если первое, .Attach
должно быть обновлено до .AddObject
в двух местах.
Это то, что вы ищете, или я неправильно понял?