Для удаления объекта из базы данных применяется метод DeleteOnSubmit() или DeleteAllOnSubmit(), если удаляется список объектов.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
string connectionString = @"Data Source=.\SQLEXPRESS;Initial Catalog=usersdb;Integrated Security=True"; DataContext db = new DataContext(connectionString); // получим последний объект для удаления var user = db.GetTable<User>().OrderByDescending(u=>u.Id).FirstOrDefault(); if(user!=null) { Console.WriteLine("Удаляемый объект:"); Console.WriteLine("Id: {0}", user.Id); Console.WriteLine("Имя: {0}", user.FirstName); Console.WriteLine("Возраст: {0}", user.Age); db.GetTable<User>().DeleteOnSubmit(user); db.SubmitChanges(); Console.WriteLine("Объект удален"); } |
В данном случае удаляется последний элемент из таблицы. В итоге при удалении будет сгенерировано и выполнено следующее sql-выражение:
1 2 3 4 5 6 7 8 9 |
DELETE FROM [Users] WHERE ([Id] = @p0) AND ([Name] = @p1) AND ([Age] = @p2) @p0 int, @p1 nvarchar(4000), @p2 int @p0=42, @p1='Ronald', @p2=34 |
Правда, у данного способа есть большой недостаток: если мы захотим удалить объект по какому-либо признаку, например, по id, то вначале нам надо получить этот объект и потом уже передать его в метод DeleteOnSubmit()
. При этом будут происходить фактически два обращения к бд: на получение объекта и на его удаление. Чтобы избежать ненужного запроса мы можем использовать хранимые процедуры или прямые запросы sql.