ObjectStateManager 클래스

정의

엔터티 형식 인스턴스 및 관계 인스턴스에 대한 개체 상태 및 ID 관리를 유지 관리합니다.Maintains object state and identity management for entity type instances and relationship instances.

public ref class ObjectStateManager
public class ObjectStateManager
type ObjectStateManager = class
Public Class ObjectStateManager
상속
ObjectStateManager

예제

이러한 예제를 기반으로 합니다 AdventureWorks Sales 모델합니다.These examples are based on the AdventureWorks Sales Model.

다음 예제에서는 ObjectStateManagerObjectContext를 가져오고 상태 관리자를 사용하여 컨텍스트의 개체에 액세스합니다.The following example gets the ObjectStateManager from the ObjectContext and uses the state manager to access an object in the context.

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");
    }
}
Dim orderId As Integer = 43680

Using context As New AdventureWorksEntities()
    Dim objectStateManager As ObjectStateManager = context.ObjectStateManager
    Dim stateEntry As ObjectStateEntry = Nothing

    Dim order = (From o In context.SalesOrderHeaders
        Where o.SalesOrderID = orderId
        Select o).First()

    ' Attempts to retrieve ObjectStateEntry for the given EntityKey. 
    Dim isPresent As Boolean = objectStateManager.TryGetObjectStateEntry(DirectCast(order, IEntityWithKey).EntityKey, stateEntry)
    If isPresent Then
        Console.WriteLine("The entity was found")
    End If
End Using

다음 예제에서는 반환되는 TryGetObjectStateEntry(EntityKey, ObjectStateEntry)에 대해 ObjectStateManager 메서드를 사용하여 해당 엔터티 키를 기반으로 개체를 가져옵니다.The following example uses the TryGetObjectStateEntry(EntityKey, ObjectStateEntry) method on the returned ObjectStateManager to get an object based on its entity key.

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();
    }
}
Private Shared Sub ApplyItemUpdates(ByVal originalItem As SalesOrderDetail, ByVal updatedItem As SalesOrderDetail)
    Using context As 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 Then
            ' 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)
        End If
        context.SaveChanges()
    End Using
End Sub

설명

ObjectStateManager는 쿼리 결과를 추적하고 겹치는 여러 쿼리 결과를 병합하는 논리를 제공합니다.ObjectStateManager tracks query results, and provides logic to merge multiple overlapping query results. 또한 사용자가 개체를 삽입, 삭제 또는 수정할 때 메모리 내 변경 내용 추적을 수행하고 업데이트용 변경 집합을 제공합니다.It also performs in-memory change tracking when a user inserts, deletes, or modifies objects, and provides the change set for updates. 이 변경 집합은 변경 내용 처리기에서 사용되며 수정된 내용을 유지합니다.This change set is used by the change processor to persist modifications.

이 클래스는 일반적으로 애플리케이션에서 직접 사용되지 않고 ObjectContext에서 사용됩니다.This class is typically used by ObjectContext and not directly in applications.

생성자

ObjectStateManager(MetadataWorkspace)

ObjectStateManager 클래스의 새 인스턴스를 초기화합니다.Initializes a new instance of the ObjectStateManager class.

속성

MetadataWorkspace

이 상태 관리자와 연결된 MetadataWorkspace를 가져옵니다.Gets the MetadataWorkspace associated with this state manager.

메서드

ChangeObjectState(Object, EntityState)

특정 개체에 대한 ObjectStateEntry의 상태를 지정된 entityState로 변경합니다.Changes state of the ObjectStateEntry for a specific object to the specified entityState.

ChangeRelationshipState(Object, Object, String, EntityState)

두 관련 개체와 탐색 속성의 이름에 따라 지정된 두 엔터티 개체 간 관계의 상태를 변경합니다.Changes the state of the relationship between two entity objects that is specified based on the two related objects and the name of the navigation property.

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

두 관련 개체와 관계의 속성에 따라 지정된 두 엔터티 개체 간 관계의 상태를 변경합니다.Changes the state of the relationship between two entity objects that is specified based on the two related objects and the properties of the relationship.

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

두 관련 개체와 탐색 속성을 정의하는 LINQ 식에 따라 지정된 두 엔터티 개체 간 관계의 상태를 변경합니다.Changes the state of the relationship between two entity objects that is specified based on the two related objects and a LINQ expression that defines the navigation property.

Equals(Object)

지정한 개체와 현재 개체가 같은지 여부를 확인합니다.Determines whether the specified object is equal to the current object.

(다음에서 상속됨 Object)
GetHashCode()

기본 해시 함수로 작동합니다.Serves as the default hash function.

(다음에서 상속됨 Object)
GetObjectStateEntries(EntityState)

지정된 상태의 개체 또는 관계에 대한 ObjectStateEntry 개체 컬렉션을 반환합니다.Returns a collection of ObjectStateEntry objects for objects or relationships with the given state.

GetObjectStateEntry(EntityKey)

지정된 키를 사용하여 개체 또는 관계 항목에 대한 ObjectStateEntry를 반환합니다.Returns an ObjectStateEntry for the object or relationship entry with the specified key.

GetObjectStateEntry(Object)

지정된 개체에 대한 ObjectStateEntry를 반환합니다.Returns an ObjectStateEntry for the specified object.

GetRelationshipManager(Object)

지정된 개체에서 사용되는 RelationshipManager를 반환합니다.Returns the RelationshipManager that is used by the specified object.

GetType()

현재 인스턴스의 Type을 가져옵니다.Gets the Type of the current instance.

(다음에서 상속됨 Object)
MemberwiseClone()

현재 Object의 단순 복사본을 만듭니다.Creates a shallow copy of the current Object.

(다음에서 상속됨 Object)
ToString()

현재 개체를 나타내는 문자열을 반환합니다.Returns a string that represents the current object.

(다음에서 상속됨 Object)
TryGetObjectStateEntry(EntityKey, ObjectStateEntry)

지정된 ObjectStateEntry를 사용하여 개체 또는 관계에 대한 해당 EntityKey를 검색하려고 시도합니다.Tries to retrieve the corresponding ObjectStateEntry for the object or relationship with the specified EntityKey.

TryGetObjectStateEntry(Object, ObjectStateEntry)

지정된 ObjectStateEntry에 대한 해당 Object를 검색하려고 시도합니다.Tries to retrieve the corresponding ObjectStateEntry for the specified Object.

TryGetRelationshipManager(Object, RelationshipManager)

지정된 개체에서 사용되는 RelationshipManager를 반환합니다.Returns the RelationshipManager that is used by the specified object.

이벤트

ObjectStateManagerChanged

상태 관리자에서 엔터티가 추가되거나 제거될 때 발생합니다.Occurs when entities are added to or removed from the state manager.

적용 대상