Partilhar via


Como excluir linhas do banco de dados

Você pode excluir linhas em um banco de dados removendo os objetos LINQ to SQL correspondentes de sua coleção relacionada à tabela. O LINQ to SQL traduz suas alterações para os comandos SQL DELETE apropriados.

O LINQ to SQL não suporta nem reconhece operações de exclusão em cascata. Se quiser excluir uma linha em uma tabela que tenha restrições contra ela, você deve concluir uma das seguintes tarefas:

  • Defina a ON DELETE CASCADE regra na restrição de chave estrangeira no banco de dados.

  • Use seu próprio código para primeiro excluir os objetos filho que impedem que o objeto pai seja excluído.

Caso contrário, uma exceção é lançada. Consulte o segundo exemplo de código mais adiante neste tópico.

Nota

Você pode substituir os métodos padrão LINQ to SQL para Insertoperações , Updatee Delete banco de dados. Para obter mais informações, consulte Personalizando operações de inserção, atualização e exclusão.

Os desenvolvedores que usam o Visual Studio podem usar o Object Relational Designer para desenvolver procedimentos armazenados para a mesma finalidade.

As etapas a seguir pressupõem que um válido DataContext conecta você ao banco de dados Northwind. Para obter mais informações, consulte Como conectar-se a um banco de dados.

Para excluir uma linha no banco de dados

  1. Consulte o banco de dados para obter a linha a ser excluída.

  2. Chame o DeleteOnSubmit método.

  3. Envie a alteração para o banco de dados.

Exemplo 1

Este primeiro exemplo de código consulta o banco de dados em busca de detalhes do pedido que pertencem ao Order #11000, marca esses detalhes do pedido para exclusão e envia essas alterações para o banco de dados.

// Query the database for the rows to be deleted.
var deleteOrderDetails =
    from details in db.OrderDetails
    where details.OrderID == 11000
    select details;

foreach (var detail in deleteOrderDetails)
{
    db.OrderDetails.DeleteOnSubmit(detail);
}

try
{
    db.SubmitChanges();
}
catch (Exception e)
{
    Console.WriteLine(e);
    // Provide for exceptions.
}
' Query the database for the rows to be deleted.
Dim deleteOrderDetails = _
    From details In db.OrderDetails() _
    Where details.OrderID = 11000 _
    Select details

For Each detail As OrderDetail In deleteOrderDetails
    db.OrderDetails.DeleteOnSubmit(detail)
Next

Try
    db.SubmitChanges()
Catch ex As Exception
    Console.WriteLine(ex)
    ' Provide for exceptions
End Try

Exemplo 2

Neste segundo exemplo, o objetivo é remover uma ordem (#10250). O código primeiro examina a OrderDetails tabela para ver se a ordem a ser removida tem filhos lá. Se a ordem tiver filhos, primeiro os filhos e, em seguida, o pedido são marcados para remoção. O DataContext coloca as exclusões reais na ordem correta para que os comandos de exclusão enviados para o banco de dados respeitem as restrições do banco de dados.

Northwnd db = new Northwnd(@"c:\northwnd.mdf");

db.Log = Console.Out;

// Specify order to be removed from database
int reqOrder = 10250;

// Fetch OrderDetails for requested order.
var ordDetailQuery =
    from odq in db.OrderDetails
    where odq.OrderID == reqOrder
    select odq;

foreach (var selectedDetail in ordDetailQuery)
{
    Console.WriteLine(selectedDetail.Product.ProductID);
    db.OrderDetails.DeleteOnSubmit(selectedDetail);
}

// Display progress.
Console.WriteLine("detail section finished.");
Console.ReadLine();

// Determine from Detail collection whether parent exists.
if (ordDetailQuery.Any())
{
    Console.WriteLine("The parent is present in the Orders collection.");
    // Fetch Order.
    try
    {
        var ordFetch =
            (from ofetch in db.Orders
             where ofetch.OrderID == reqOrder
             select ofetch).First();
        db.Orders.DeleteOnSubmit(ordFetch);
        Console.WriteLine("{0} OrderID is marked for deletion.", ordFetch.OrderID);
    }
    catch (Exception e)
    {
        Console.WriteLine(e.Message);
        Console.ReadLine();
    }
}
else
{
    Console.WriteLine("There was no parent in the Orders collection.");
}

// Display progress.
Console.WriteLine("Order section finished.");
Console.ReadLine();

try
{
    db.SubmitChanges();
}
catch (Exception e)
{
    Console.WriteLine(e.Message);
    Console.ReadLine();
}

// Display progress.
Console.WriteLine("Submit finished.");
Console.ReadLine();
Dim db As New Northwnd("c:\northwnd.mdf")

db.Log = Console.Out
' Specify order to be removed from database.
Dim reqOrder As Integer = 10252

' Fetch OrderDetails for requested order.
Dim ordDetailQuery = _
From odq In db.OrderDetails _
Where odq.OrderID = reqOrder _
Select odq

For Each selectedDetail As OrderDetail In ordDetailQuery
    Console.WriteLine(selectedDetail.Product.ProductID)
    db.OrderDetails.DeleteOnSubmit(selectedDetail)
Next

' Display progress.
Console.WriteLine("Detail section finished.")
Console.ReadLine()

' Determine from Detail collection whether parent exists.
If ordDetailQuery.Any Then
    Console.WriteLine("The parent is present in the Orders collection.")
    ' Fetch order.
    Try
        Dim ordFetch = _
        (From ofetch In db.Orders _
         Where ofetch.OrderID = reqOrder _
         Select ofetch).First()

        db.Orders.DeleteOnSubmit(ordFetch)
        Console.WriteLine("{0} OrderID is marked for deletion.,", ordFetch.OrderID)

    Catch ex As Exception
        Console.WriteLine(ex.Message)
        Console.ReadLine()
    End Try

Else
    Console.WriteLine("There was no parent in the Orders collection.")

End If


' Display progress.
Console.WriteLine("Order section finished.")
Console.ReadLine()

Try
    db.SubmitChanges()

Catch ex As Exception
    Console.WriteLine(ex.Message)
    Console.ReadLine()

End Try

' Display progress.
Console.WriteLine("Submit finished.")
Console.ReadLine()

Consulte também