ObjectStateManager 類別
定義
重要
部分資訊涉及發行前產品,在發行之前可能會有大幅修改。 Microsoft 對此處提供的資訊,不做任何明確或隱含的瑕疵擔保。
維護實體 (Entity) 類型執行個體 (Instance) 和關聯性 (Relationship) 執行個體的物件狀態與識別 (Identity) 管理。
public ref class ObjectStateManager
public class ObjectStateManager
type ObjectStateManager = class
Public Class ObjectStateManager
- 繼承
-
ObjectStateManager
範例
下列範例會從 ObjectStateManager 中取得 ObjectContext 並且使用此狀態管理員來存取內容中的物件。
int orderId = 43680;
using (AdventureWorksEntities context =
new AdventureWorksEntities())
{
ObjectStateManager objectStateManager = context.ObjectStateManager;
ObjectStateEntry stateEntry = null;
var order = (from o in context.SalesOrderHeaders
where o.SalesOrderID == orderId
select o).First();
// Attempts to retrieve ObjectStateEntry for the given EntityKey.
bool isPresent = objectStateManager.TryGetObjectStateEntry(((IEntityWithKey)order).EntityKey, out stateEntry);
if (isPresent)
{
Console.WriteLine("The entity was found");
}
}
下列範例會針對傳回的 TryGetObjectStateEntry(EntityKey, ObjectStateEntry) 使用 ObjectStateManager 方法,以便根據實體索引鍵取得物件。
private static void ApplyItemUpdates(SalesOrderDetail originalItem,
SalesOrderDetail updatedItem)
{
using (AdventureWorksEntities context =
new AdventureWorksEntities())
{
context.SalesOrderDetails.Attach(updatedItem);
// Check if the ID is 0, if it is the item is new.
// In this case we need to chage the state to Added.
if (updatedItem.SalesOrderDetailID == 0)
{
// Because the ID is generated by the database we do not need to
// set updatedItem.SalesOrderDetailID.
context.ObjectStateManager.ChangeObjectState(updatedItem, System.Data.EntityState.Added);
}
else
{
// If the SalesOrderDetailID is not 0, then the item is not new
// and needs to be updated. Because we already added the
// updated object to the context we need to apply the original values.
// If we attached originalItem to the context
// we would need to apply the current values:
// context.ApplyCurrentValues("SalesOrderDetails", updatedItem);
// Applying current or original values, changes the state
// of the attached object to Modified.
context.ApplyOriginalValues("SalesOrderDetails", originalItem);
}
context.SaveChanges();
}
}
備註
ObjectStateManager 會追蹤查詢結果,並提供邏輯來合併多個重疊的查詢結果。 它也會在使用者插入、刪除或修改物件時執行記憶體中的變更追蹤,並且提供更新的變更集。 變更處理器會使用這個變更集來保存修改項目。
這個類別 (Class) 通常是由 ObjectContext 所使用,而且不會直接使用在應用程式中。
建構函式
ObjectStateManager(MetadataWorkspace) |
初始化 ObjectStateManager 類別的新執行個體。 |
屬性
MetadataWorkspace |
取得與這個狀態管理員相關聯的 MetadataWorkspace。 |
方法
事件
ObjectStateManagerChanged |
在狀態管理員中加入或移除實體時發生。 |