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 для определенного объекта на указанное состояние |
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 |
Событие происходит при добавлении или удалении сущностей из диспетчера состояний. |