ObjectContext.DeleteObject(Object) Methode
Definition
Wichtig
Einige Informationen beziehen sich auf Vorabversionen, die vor dem Release ggf. grundlegend überarbeitet werden. Microsoft übernimmt hinsichtlich der hier bereitgestellten Informationen keine Gewährleistungen, seien sie ausdrücklich oder konkludent.
Markiert ein Objekt zum Löschen.
public:
void DeleteObject(System::Object ^ entity);
public void DeleteObject (object entity);
member this.DeleteObject : obj -> unit
Public Sub DeleteObject (entity As Object)
Parameter
- entity
- Object
Ein Objekt, das die zu löschende Entität angibt. Das Objekt kann jeden Status außer Detached haben.
Ausnahmen
entity
ist null
.
entity
existiert nicht.
Beispiele
In diesem Beispiel wird eine EntityKey mit einer bestimmten ProductID erstellt, mithilfe des Schlüssels ein Product-Objekt aus der Datenquelle abgerufen, das Produkt gelöscht und die Änderungen in der Datenbank gespeichert.
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));
}
}
In diesem Beispiel wird ein vorhandenes Bestellelement gelöscht, ein neues Element hinzugefügt und die Änderungen in der Datenbank gespeichert.
// 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());
}
}
Hinweise
Markiert ein Objekt aus dem ObjectStateManager zum Löschen. Das -Objekt wird in der Datenquelle gelöscht, wenn die SaveChanges -Methode aufgerufen wird.
Beim Löschen des übergeordneten Objekts werden auch alle untergeordneten Objekte in der eingeschränkten Beziehung gelöscht. Das Ergebnis ist das gleiche wie beim Aktivieren der CascadeDelete
-Eigenschaft in der Zuordnung für die Beziehung.
Die DeleteObject -Methode kann für Objekte aufgerufen werden, die bereits gelöscht wurden.