Share via


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가 없는 경우

예제

다음은 특정 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));
    }
}

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

// 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());
    }
}

설명

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

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

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

적용 대상

추가 정보