ObjectStateManager.GetObjectStateEntry Method (EntityKey)
Returns an ObjectStateEntry for the object or relationship entry with the specified key.
Namespace: System.Data.Objects
Assembly: System.Data.Entity (in System.Data.Entity.dll)
Parameters
- key
- Type: System.Data.EntityKey
The EntityKey.
Return Value
Type: System.Data.Objects.ObjectStateEntryThe corresponding ObjectStateEntry for the given EntityKey.
| Exception | Condition |
|---|---|
| ArgumentNullException | When key is null. |
| ArgumentException | When the specified key cannot be found in the state manager. |
| InvalidOperationException | No entity with the specified EntityKey exists in the ObjectStateManager. |
Use the TryGetObjectStateEntry(EntityKey, ObjectStateEntry) method to return an ObjectStateEntry object without having to handle the InvalidOperationException raised by the GetObjectStateEntry(EntityKey) method.
The example in this topic is based on the Adventure Works Sales Model. The example gets the ObjectStateEntry for the given EntityKey from the ObjectStateManager. Then it gets the current value of the SalesOrderHeader.PurchaseOrderNumber property, changes the property's value, and enumerates through the collection of modified properties.
// 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 of an existing order. order.Status = 1; // 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 = 0, 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); // Get the ObjectStateEntry for the order. ObjectStateEntry stateEntry = context.ObjectStateManager .GetObjectStateEntry(order); Console.WriteLine("State before SaveChanges() is called: {0}", stateEntry.State.ToString()); // Save changes in the object context to the database. int changes = context.SaveChanges(); Console.WriteLine("State after SaveChanges() is called: {0}", stateEntry.State.ToString()); Console.WriteLine(changes.ToString() + " changes saved!"); Console.WriteLine("Updated item for order ID: " + order.SalesOrderID.ToString()); // Iterate through the collection of SalesOrderDetail items. 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()); } }
Windows 8, Windows Server 2012, Windows 7, Windows Vista SP2, Windows Server 2008 (Server Core Role not supported), Windows Server 2008 R2 (Server Core Role supported with SP1 or later; Itanium not supported)
The .NET Framework does not support all versions of every platform. For a list of the supported versions, see .NET Framework System Requirements.