次の方法で共有


ObjectStateManager クラス

定義

オブジェクトの状態を維持し、エンティティ型のインスタンスおよびリレーションシップ インスタンスの ID 管理を行います。

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 はクエリ結果を追跡し、重複する複数のクエリ結果をマージするロジックを提供します。 また、ユーザーがオブジェクトを挿入、削除、変更したときにインメモリの変更追跡を実行したり、更新用の変更セットを提供したりします。 この変更セットは、変更プロセッサが変更を保存する場合に使用します。

このクラスは通常 ObjectContext で使用され、アプリケーションでは直接使用されません。

コンストラクター

ObjectStateManager(MetadataWorkspace)

ObjectStateManager クラスの新しいインスタンスを初期化します。

プロパティ

MetadataWorkspace

この状態マネージャーに関連付けられている MetadataWorkspace を取得します。

メソッド

ChangeObjectState(Object, EntityState)

特定のオブジェクトの ObjectStateEntry の状態を、指定された entityState に変更します。

ChangeRelationshipState(Object, Object, String, EntityState)

関連する 2 つのオブジェクトとナビゲーション プロパティの名前に基づいて、2 つのエンティティ オブジェクト間の指定されたリレーションシップの状態を変更します。

ChangeRelationshipState(Object, Object, String, String, EntityState)

関連する 2 つのオブジェクトとリレーションシップのプロパティに基づいて、2 つのエンティティ オブジェクト間の指定されたリレーションシップの状態を変更します。

ChangeRelationshipState<TEntity>(TEntity, Object, Expression<Func<TEntity,Object>>, EntityState)

関連する 2 つのオブジェクトとナビゲーション プロパティを定義する LINQ 式とに基づいて、2 つのエンティティ オブジェクト間の指定されたリレーションシップの状態を変更します。

Equals(Object)

指定されたオブジェクトが現在のオブジェクトと等しいかどうかを判断します。

(継承元 Object)
GetHashCode()

既定のハッシュ関数として機能します。

(継承元 Object)
GetObjectStateEntries(EntityState)

指定された状態のオブジェクトまたはリレーションシップの ObjectStateEntry オブジェクトのコレクションを返します。

GetObjectStateEntry(EntityKey)

指定されたキーのオブジェクトまたはリレーションシップ エントリの ObjectStateEntry を返します。

GetObjectStateEntry(Object)

指定されたオブジェクトの ObjectStateEntry を返します。

GetRelationshipManager(Object)

指定オブジェクトによって使用される RelationshipManager を返します。

GetType()

現在のインスタンスの Type を取得します。

(継承元 Object)
MemberwiseClone()

現在の Object の簡易コピーを作成します。

(継承元 Object)
ToString()

現在のオブジェクトを表す文字列を返します。

(継承元 Object)
TryGetObjectStateEntry(EntityKey, ObjectStateEntry)

指定された ObjectStateEntry のオブジェクトまたはリレーションシップに対応する EntityKey の取得を試みます。

TryGetObjectStateEntry(Object, ObjectStateEntry)

指定された ObjectStateEntry に対応する Object の取得を試みます。

TryGetRelationshipManager(Object, RelationshipManager)

指定オブジェクトによって使用される RelationshipManager を返します。

イベント

ObjectStateManagerChanged

状態マネージャーに対してエンティティの追加または削除が実行されたときに発生します。

適用対象