Это сводит меня с ума. Я не уверен, что еще попробовать. Это моя последняя попытка обновить список объектов в другом объекте с помощью EF 4.3.Обновление детской коллекции с EF 4.3 - Устранительная ассоциация в DB
Сценарий состоит в том, что пользователь добавил новую задачу в приложение, у которого уже есть одна задача в свойстве Tasks. Приложение не привязано к контексту БД, потому что оно было восстановлено в предыдущем вызове логики/БД. Это класс и свойство:
public class Application : EntityBase
{
public ObservableCollection<TaskBase> Tasks { // typical get/set code here }
}
Это моя попытка обновить список. Случается, что новая задача добавляется, и ассоциация корректно существует в БД. Однако первая задача, которая не была изменена, удалила ассоциацию в БД (ее ссылка на приложение).
Это метод Save(), который принимает приложение, которое пользователь модифицированную:
public void Save(Application newApp)
{
Application appFromContext;
appFromContext = this.Database.Applications
.Include(x => x.Tasks)
.Single(x => x.IdForEf == newApp.IdForEf);
AddTasksToApp(newApp, appFromContext);
this.Database.SaveChanges();
}
И это чушь, что это, видимо, необходимо сохранить с помощью EF:
private void AddTasksToApp(Application appNotAssociatedWithContext, Application appFromContext)
{
List<TaskBase> originalTasks = appFromContext.Tasks.ToList();
appFromContext.Tasks.Clear();
foreach (TaskBase taskModified in appNotAssociatedWithContext.Tasks)
{
if (taskModified.IdForEf == 0)
{
appFromContext.Tasks.Add(taskModified);
}
else
{
TaskBase taskBase = originalTasks.Single(x => x.IdForEf == taskModified.IdForEf); // Get original task
this.Database.Entry(taskBase).CurrentValues.SetValues(taskModified); // Update with new
}
}
}
Может ли кто-нибудь понять, почему первая задача будет терять связь с приложением в БД? Эта первая задача проходит через блок else в вышеуказанном коде.
Далее, мне нужно, чтобы выяснить, как удалить один или несколько элементов, но первые вещи первый ...