ObjectContext.DeleteObject(Object) 메서드

정의

개체에 삭제 표시를 합니다.

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

매개 변수

entity
Object

삭제할 엔터티를 지정하는 개체입니다. 개체는 Detached를 제외한 모든 상태일 수 있습니다.

예외

entity이(가) null인 경우

entity가 없는 경우

예제

이러한 예제는 Microsoft SQL Server 제품 샘플: 데이터베이스를 기반으로 합니다.

다음은 특정 ProductID를 EntityKey 사용하여 생성하고, 키를 사용하여 데이터 원본에서 Product 개체를 검색하고, 제품을 삭제하고, 변경 내용을 데이터베이스에 저장하는 예제입니다.

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

다음은 기존 주문 항목을 삭제하고, 새 항목을 추가하고, 변경 내용을 데이터베이스에 저장하는 예제입니다.

// 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

설명

에서 삭제할 개체를 ObjectStateManager표시합니다. 메서드가 호출될 때 데이터 원본에서 개체가 SaveChanges 삭제됩니다.

부모 개체를 삭제하면 제한된 관계의 모든 자식 개체도 삭제됩니다. 이 결과는 관계에 대한 연결에서 CascadeDelete 속성을 사용하도록 설정하는 것과 같습니다.

DeleteObject 이미 삭제된 개체에서 메서드를 호출할 수 있습니다.

적용 대상

추가 정보