Новые строки добавляются при попытке связать существующие строки в Entity Framework - PullRequest
0 голосов
/ 02 декабря 2018

Сначала я использую код EF6 в приложении WPF.У меня есть раздел, который позволяет пользователю либо обновить, либо добавить новую задачу.Задачи и Люди имеют отношения многие ко многим.Вот часть кода, в которой я пытаюсь фактически добавить новую задачу (или обновить существующую) в базу данных:

using (TESterContext context = new TESterContext())
{
    if (TaskToEdit.Id == 0)
    {
        TaskToEdit.CreatedDatetime = DateTime.Now;
        TaskToEdit.CreatedById = AppState.CurrentUser.Id;
        TaskToEdit.Completed = false;
        TaskToEdit.Archived = false;
        context.Tasks.Add(TaskToEdit);
        context.SaveChanges();
        TaskToEdit = context.Tasks.
            Include(pa => pa.PeopleAssigned).
            SingleOrDefault(tk => tk.Id == TaskToEdit.Id);
    }
    else
    {
        TaskToEdit.PeopleAssigned.Clear();
        context.Entry(TaskToEdit).State = EntityState.Modified;
        context.SaveChanges();
    }
    foreach (Person per in AssignedPeople)
    {
        TaskToEdit.PeopleAssigned.Add(per);
    }
    int response = context.SaveChanges();
    etc

Теперь, когда я добавляю новую задачу, все идетхорошо, за исключением того, что он добавляет уже существующих людей в таблицу людей с новыми номерами идентификаторов (хотя у них уже есть идентификаторы).Я намерен просто связать людей с задачей, а не добавлять их снова.

У меня нет модели для таблицы соединений, поэтому я не могу просто добавить туда новые строки.Кроме того, если это важно, я отключил создание прокси-сервера (поскольку я извлекал данные, закрывал контекст, связывался с ним, а затем вставлял обратно, создавал всевозможные ошибки контекста)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...