Как удалить и заново вставить сущности в linq? - PullRequest
2 голосов
/ 22 февраля 2011

У меня возникают проблемы при вставке объектов в linq после их удаления (без отправки изменений).

List<AlergiesPerPersonBE> AlergiesPerPerson = AlergiesPerPersonToInsert;

RepositoryFactory.GetAlergiesPerPersonRepository().DeleteWhere(x => x.PersonId == id);
RepositoryFactory.GetAlergiesPerPersonRepository().Insert(AlergiesPerPerson);

DataContextFactory.SubmitChanges();

Оба (удалить и вставить) не отправляют никаких изменений. Они просто InsertAllOnSubmit и DeleteAllOnSumbit.

Код отлично работает с первого раза. Все детали вставлены правильно. Во второй раз, когда я запускаю один и тот же код, все строки базы данных удаляются. В третий раз все отлично работает. Это работает, потом нет, и так далее.

Ответы [ 3 ]

2 голосов
/ 22 февраля 2011

Попробуйте

...DeleteWhere(x => x.PersonId == id); 
DataContextFactory.SubmitChanges();

...Insert(AlergiesPerPerson);
DataContextFactory.SubmitChanges();

Нет причин, по которым вы должны отправлять изменения только один раз за единицу работы. Обратите внимание, что это все равно будет работать с любыми имеющимися у вас транзакциями.

2 голосов
/ 22 февраля 2011

Я думаю, вам придется заново воссоздать детали.В настоящее время контекст отслеживает этот элемент как «удаленный», даже если изменения сохранения еще не были вызваны.

0 голосов
/ 22 февраля 2011

Вокруг грязная работа. Поскольку вы хотите избавиться от DataContext обозревателя, вам необходимо:

  1. сериализация объекта или графика в память поток.
  2. Затем десериализовать его как новый экземпляр
  3. изменить идентификатор на 0
  4. Присоединить новый объект к DataContext и отправить меняется.
  5. Удалить предыдущее

Вы можете переместить это в статический класс CloneHelper, чтобы вы могли использовать его для любого типа

...