ObjectStateManager Класс

Определение

Поддерживает состояние объекта и управление удостоверениями для экземпляров типов сущностей и экземпляров связей.

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)

Изменяет состояние связи между двумя объектами сущности, заданными на основе двух связанных объектов и имени свойства навигации.

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

Изменяет состояние связи между двумя объектами сущности, заданными на основе двух связанных объектов и свойств связи.

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

Изменяет состояние связи между двумя объектами сущности, заданными на основе двух связанных объектов и выражения LINQ, определяющего свойство навигации.

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

Происходит при добавлении или удалении сущностей из диспетчера состояний.

Применяется к