Проблема: Через LINQ не удаляется объект
При просмотре запросов через DataContext.Log выясняется, что в базе даже запросы на удаление не уходят.
Пример
var db = new DBDataContext(); db.Log = Console.Out; var q = from obj in db.PublicObjects where obj.ObjectID == new Guid("56547e27-be08-4440-962e-8e20bc1fb1ba") select obj; var o = q.Single(); db.PublicObjects.DeleteOnSubmit(o); db.SubmitChanges();
Запрос нормально отрабатывается, но объект не удаляется и так раз за разом.
Причина
В DataContext для моей БД был определен partial метод DeletePublicObject, при этом базовый объект перестает отрабатывать свою схему удаления
partial class DBDataContext { partial void DeletePublicObject(PublicObject instance) { instance.OnDetele(); } }
Решение
Нужно или самому выполнить MS-SQL комманду для удаления через ExecuteCommand или вызвать метод, который отрабатывает удаление по умолчанию – ExecuteDynamicDelete. Я выборал второй путь, вот что получилось.
partial class DBDataContext { partial void DeletePublicObject(PublicObject instance) { instance.OnDetele(); ExecuteDynamicDelete(instance); } }
Вставка и обновление записей обрабатываются аналогично, для них соответственно методы по умолчанию это ExecuteDynamicInsert и ExecuteDynamicUpdate.