ObjectContext.DeleteObject(Object) 메서드
정의
중요
일부 정보는 릴리스되기 전에 상당 부분 수정될 수 있는 시험판 제품과 관련이 있습니다. Microsoft는 여기에 제공된 정보에 대해 어떠한 명시적이거나 묵시적인 보증도 하지 않습니다.
개체에 삭제 표시를 합니다.
public:
void DeleteObject(System::Object ^ entity);
public void DeleteObject (object entity);
member this.DeleteObject : obj -> unit
Public Sub DeleteObject (entity As Object)
매개 변수
예외
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 이미 삭제된 개체에서 메서드를 호출할 수 있습니다.