Проблема: Через 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.
Комментариев нет:
Отправить комментарий