Я сейчас вставляю / обновляю поля вроде этого (если есть лучший способ, пожалуйста, так и говорим - мы всегда учимся)
public void UpdateChallengeAnswers(List<ChallengeAnswerInfo> model, Decimal field_id, Decimal loggedUserId)
{
JK_ChallengeAnswers o;
foreach (ChallengeAnswerInfo a in model)
{
o = this.FindChallengeAnswerById(a.ChallengeAnswerId);
if (o == null) o = new JK_ChallengeAnswers();
o.answer = FilterString(a.Answer);
o.correct = a.Correct;
o.link_text = "";
o.link_url = "";
o.position = FilterInt(a.Position);
o.updated_user = loggedUserId;
o.updated_date = DateTime.UtcNow;
if (o.challenge_id == 0)
{
// New record
o.challenge_id = field_id; // FK
o.created_user = loggedUserId;
o.created_date = DateTime.UtcNow;
db.JK_ChallengeAnswers.AddObject(o);
}
else
{
// Update record
this.Save();
}
}
this.Save(); // Commit changes
}
Как вы можете видеть есть 2 раза this.Save()
(ведьма вызывает db.SaveChanges();
)
, когда При добавлении мы помещаем новый объект в Place Holder с помощьюAddObject
метод, другими словами, новый объект не фиксируется сразу, и мы можем разместить столько объектов, сколько мы хотим.
Но когда это обновление, мне нужно сначала сохранить, прежде чем перейти к следующемуобъект, есть ли метод, который я могу использовать для, скажем,
if (o.challenge_id == 0)
{
// New record
o.challenge_id = field_id;
o.created_user = loggedUserId;
o.created_date = DateTime.UtcNow;
db.JK_ChallengeAnswers.AddObject(o);
}
else
{
// Update record
db.JK_ChallengeAnswers.RetainObject(o);
}
}
this.Save(); // Only save once when all objects are ready to commit
}
Так что, если есть 5 обновлений, мне не нужно сохранять в базу данных 5 раз , но только один раз в конце.
Спасибо.