Поделиться через


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

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

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