Обнаружение странного поведения с Linq:
Положение:
У меня есть отношения многие ко многим между двумя объектами: UserProfile и BusinessUnit (объединены в таблицу UserProfile_BusinessUnit).
Используя ListBox, пользователь может выбрать несколько BusinessUnits, к которым принадлежит UserProfile.
При обновлении записи я звоню:
dataContext.UserProfile_BusinessUnit.DeleteAllOnSubmit (userProfile.BusinessUnits);
dataContext.SubmitChanges ();
В результате удаляются записи из UserProfile_BusinessUnit
Затем я добавляю записи обратно из мульти-выбора, используя foreach
foreach (var b в модели. BusinessUnitsSelected)
{
userProfile.BusinessUnits.Add (GetBusinessUnitAsEntity (b.ToString ()));
}
dataContext.SubmitChanges ();
Выпуск:
Только NET NEW BusinessUnits добавляются обратно в отношения. Если BusinessUnit остается выбранным и адресуется как часть DeleteAllOnSubmit, он не добавляется повторно ... это похоже на то, что dataContext продолжает видеть запись как помеченную для удаления (даже если я уже вызвал SubmitChanges ()). ..
РЕДАКТИРОВАТЬ: я пытался удалить SubmitChanges () между вызовами, чтобы увидеть, если он будет разрешен, но он только заканчивает тем, что удаляет все записи и не добавляет заново ...
РЕДАКТИРОВАТЬ: я добавил следующее, чтобы это работало ... мне кажется, взломать:
dataContext = null;
dataContext = new UserProfileDataContext();
Не должен ли быть способ заставить текст данных "фиксировать" и двигаться дальше?
Есть идеи, как мне поступить? Я думал о том, чтобы сбросить DeleteAllOnSubmit и явно сравнить то, что происходит, с выходом ... но кажется, что это намного больше работы, чем мне нужно сделать ...
Спасибо!
Код:
dataContext.UserProfile_BusinessUnits.DeleteAllOnSubmit(userProfile.UserProfile_BusinessUnits);
dataContext.SubmitChanges(); // all records deleted
foreach (var b in model.BusinessUnitsSelected)
{
userProfile.BusinessUnits.Add(GetBusinessUnitAsEntity(b.ToString()));
}
cx.SubmitChanges(); // only net new being added