ObjectContext.DeleteObject(Object) ObjectContext.DeleteObject(Object) ObjectContext.DeleteObject(Object) ObjectContext.DeleteObject(Object) Method

Definition

Marks an object for deletion.

public:
 void DeleteObject(System::Object ^ entity);
public void DeleteObject (object entity);
member this.DeleteObject : obj -> unit
Public Sub DeleteObject (entity As Object)

Parameters

entity
Object Object Object Object

An object that specifies the entity to delete. The object can be in any state except Detached.

Exceptions

Examples

These examples are based on the AdventureWorks Sales Model.

This example constructs an EntityKey with a specific ProductID, uses the key to retrieve a Product object from the data source, deletes the product, and saves the changes to the database.

object deletedProduct;

// Define the key of the product to delete.
EntityKey productKey =
    new EntityKey("AdventureWorksEntities.Products",
        "ProductID", productId);

using (AdventureWorksEntities context = new AdventureWorksEntities())
{
    // Get the object to delete with the specified key.
    if (context.TryGetObjectByKey(productKey, out deletedProduct))
    {
        try
        {
            // Delete the object with the specified key
            // and save changes to delete the row from the data source.
            context.DeleteObject(deletedProduct);
            context.SaveChanges();
        }
        catch (OptimisticConcurrencyException ex)
        {
            throw new InvalidOperationException(string.Format(
                "The product with an ID of '{0}' could not be deleted.\n"
                + "Make sure that any related objects are already deleted.\n",
                productKey.EntityKeyValues[0].Value), ex);
        }
    }
    else
    {
        throw new InvalidOperationException(string.Format(
            "The product with an ID of '{0}' could not be found.\n"
            + "Make sure that Product exists.\n",
            productKey.EntityKeyValues[0].Value));
    }
}
Dim deletedProduct As Object

' Define the key of the product to delete. 
Dim productKey As New EntityKey("AdventureWorksEntities.Products", "ProductID", productId)

Using context As New AdventureWorksEntities()
    ' Get the object to delete with the specified key. 
    If context.TryGetObjectByKey(productKey, deletedProduct) Then
        Try
            ' Delete the object with the specified key 
            ' and save changes to delete the row from the data source. 
            context.DeleteObject(deletedProduct)
            context.SaveChanges()
        Catch ex As OptimisticConcurrencyException
            Throw New InvalidOperationException(String.Format("The product with an ID of '{0}' could not be deleted." & _
                                                              "Make sure that any related objects are already deleted.", _
                                                              productKey.EntityKeyValues(0).Value), ex)
        End Try
    Else
        Throw New InvalidOperationException(String.Format("The product with an ID of '{0}' could not be found." & _
                                                          "Make sure that Product exists.", productKey.EntityKeyValues(0).Value))
    End If
End Using

This example deletes an existing order item, adds a new item, and saves the changes to the database.

// Specify the order to update.
int orderId = 43680;

using (AdventureWorksEntities context =
    new AdventureWorksEntities())
{
    try
    {
        var order = (from o in context.SalesOrderHeaders
                     where o.SalesOrderID == orderId
                     select o).First();

        // Change the status and ship date of an existing order.
        order.Status = 1;
        order.ShipDate = DateTime.Today;

        // You do not have to call the Load method to load the details for the order,
        // because  lazy loading is set to true 
        // by the constructor of the AdventureWorksEntities object. 
        // With  lazy loading set to true the related objects are loaded when
        // you access the navigation property. In this case SalesOrderDetails.

        // Delete the first item in the order.
        context.DeleteObject(order.SalesOrderDetails.First());

        // Create a new SalesOrderDetail object.
        // You can use the static CreateObjectName method (the Entity Framework
        // adds this method to the generated entity types) instead of the new operator:
        // SalesOrderDetail.CreateSalesOrderDetail(1, 0, 2, 750, 1, (decimal)2171.2942, 0, 0,
        //                                         Guid.NewGuid(), DateTime.Today));
        SalesOrderDetail detail = new SalesOrderDetail
        {
            SalesOrderID = 1,
            SalesOrderDetailID = 0,
            OrderQty = 2,
            ProductID = 750,
            SpecialOfferID = 1,
            UnitPrice = (decimal)2171.2942,
            UnitPriceDiscount = 0,
            LineTotal = 0,
            rowguid = Guid.NewGuid(),
            ModifiedDate = DateTime.Now
        };

        order.SalesOrderDetails.Add(detail);

        // Save changes in the object context to the database.
        int changes = context.SaveChanges();

        Console.WriteLine(changes.ToString() + " changes saved!");
        Console.WriteLine("Updated item for order: "
            + order.SalesOrderID.ToString());

        foreach (SalesOrderDetail item in order.SalesOrderDetails)
        {
            Console.WriteLine("Item ID: "
                + item.SalesOrderDetailID.ToString() + "  Product: "
                + item.ProductID.ToString() + "  Quantity: "
                + item.OrderQty.ToString());
        }
    }
    catch (UpdateException ex)
    {
        Console.WriteLine(ex.ToString());
    }
}
' Specify the order to update. 
Dim orderId As Integer = 43680

Using context As New AdventureWorksEntities()
    Try
        Dim order = (From o In context.SalesOrderHeaders
            Where o.SalesOrderID = orderId
            Select o).First()

        ' Change the status and ship date of an existing order. 
        order.Status = 1
        order.ShipDate = DateTime.Today

        ' You do not have to call the Load method to load the details for the order, 
        ' because lazy loading is set to true 
        ' by the constructor of the AdventureWorksEntities object. 
        ' With lazy loading set to true the related objects are loaded when 
        ' you access the navigation property. In this case SalesOrderDetails. 

        ' Delete the first item in the order. 
        context.DeleteObject(order.SalesOrderDetails.First())

        ' Create a new SalesOrderDetail object. 
        ' You can use the static CreateObjectName method (the Entity Framework 
        ' adds this method to the generated entity types) instead of the new operator: 
        ' SalesOrderDetail.CreateSalesOrderDetail(1, 0, 2, 750, 1, (decimal)2171.2942, 0, 0, 
        ' Guid.NewGuid(), DateTime.Today)) 
        Dim detail = New SalesOrderDetail With
        {
            .SalesOrderID = 0,
            .SalesOrderDetailID = 0,
            .OrderQty = 2,
            .ProductID = 750,
            .SpecialOfferID = 1,
            .UnitPrice = CDec(2171.2942),
            .UnitPriceDiscount = 0,
            .LineTotal = 0,
            .rowguid = Guid.NewGuid(),
            .ModifiedDate = DateTime.Now
        }
        order.SalesOrderDetails.Add(detail)

        ' Save changes in the object context to the database. 
        Dim changes As Integer = context.SaveChanges()

        Console.WriteLine(changes.ToString() + " changes saved!")
        Console.WriteLine("Updated item for order: {0}", order.SalesOrderID.ToString())

        For Each item As SalesOrderDetail In order.SalesOrderDetails
            Console.WriteLine("Item ID: {0}", item.SalesOrderDetailID.ToString())
            Console.WriteLine("Product: {0}", item.ProductID.ToString())
            Console.WriteLine("Quantity: {0}", item.OrderQty.ToString())
        Next
    Catch ex As UpdateException
        Console.WriteLine(ex.ToString())
    End Try
End Using

Remarks

Marks an object for deletion from the ObjectStateManager. The object is deleted in the data source when the SaveChanges method is called.

Deleting the parent object also deletes all the child objects in the constrained relationship. This result is the same as enabling the CascadeDelete property on the association for the relationship.

The DeleteObject method can be called on objects that are already deleted.

Applies to

See also