Удаление в LINQ to SQL

Данное руководство устарело. Актуальное руководство: по ADO.NET и работе с базами данных в .NET 6

Последнее обновление: 31.10.2015

Для удаления объекта из базы данных применяется метод DeleteOnSubmit() или DeleteAllOnSubmit(), если удаляется список объектов.

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-выражение:

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.

Помощь сайту
Юмани:
410011174743222
Перевод на карту
Номер карты:
4048415020898850