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

在从状态管理器中添加或移除实体时发生。

适用于