ObjectStateManager Classe
Definizione
Importante
Alcune informazioni sono relative alla release non definitiva del prodotto, che potrebbe subire modifiche significative prima della release definitiva. Microsoft non riconosce alcuna garanzia, espressa o implicita, in merito alle informazioni qui fornite.
Mantiene lo stato dell'oggetto e la gestione delle identità per le istanze del tipo di entità e le istanze della relazione.
public ref class ObjectStateManager
public class ObjectStateManager
type ObjectStateManager = class
Public Class ObjectStateManager
- Ereditarietà
-
ObjectStateManager
Esempio
Nell'esempio seguente viene recuperato l'oggetto ObjectStateManager da ObjectContext e viene utilizzato il gestore degli stati per accedere a un oggetto nel contesto.
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");
}
}
Nell'esempio seguente viene utilizzato il metodo TryGetObjectStateEntry(EntityKey, ObjectStateEntry) sull'oggetto ObjectStateManager restituito per ottenere un oggetto in base alla relativa chiave di entità.
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();
}
}
Commenti
ObjectStateManager tiene traccia dei risultati delle query e fornisce la logica per unire più risultati di query sovrapposti. Esegue inoltre il rilevamento delle modifiche in memoria quando vengono inseriti, eliminati o modificati gli oggetti e fornisce il set di modifiche per gli aggiornamenti. Tale set viene utilizzato dal processore delle modifiche per rendere le modifiche persistenti.
Questa classe viene utilizzata in genere da ObjectContext e non direttamente nelle applicazioni.
Costruttori
ObjectStateManager(MetadataWorkspace) |
Inizializza una nuova istanza della classe ObjectStateManager. |
Proprietà
MetadataWorkspace |
Ottiene l'oggetto MetadataWorkspace associato a questo gestore degli stati. |
Metodi
ChangeObjectState(Object, EntityState) |
Imposta lo stato dell'oggetto ObjectStateEntry di un oggetto specifico sul valore |
ChangeRelationshipState(Object, Object, String, EntityState) |
Modifica lo stato della relazione tra due oggetti entità specificata in base ai due oggetti correlati e al nome della proprietà di navigazione. |
ChangeRelationshipState(Object, Object, String, String, EntityState) |
Modifica lo stato della relazione tra due oggetti entità specificata in base ai due oggetti correlati e alle proprietà della relazione. |
ChangeRelationshipState<TEntity>(TEntity, Object, Expression<Func<TEntity,Object>>, EntityState) |
Modifica lo stato della relazione tra due oggetti entità specificata in base ai due oggetti correlati e a un'espressione LINQ che definisce la proprietà di navigazione. |
Equals(Object) |
Determina se l'oggetto specificato è uguale all'oggetto corrente. (Ereditato da Object) |
GetHashCode() |
Funge da funzione hash predefinita. (Ereditato da Object) |
GetObjectStateEntries(EntityState) |
Restituisce una raccolta di oggetti ObjectStateEntry per oggetti o relazioni con lo stato specificato. |
GetObjectStateEntry(EntityKey) |
Restituisce un oggetto ObjectStateEntry per la voce di oggetto o di relazione con la chiave specificata. |
GetObjectStateEntry(Object) |
Restituisce un oggetto ObjectStateEntry per l'oggetto specificato. |
GetRelationshipManager(Object) |
Restituisce l'oggetto RelationshipManager usato dall'oggetto specificato. |
GetType() |
Ottiene l'oggetto Type dell'istanza corrente. (Ereditato da Object) |
MemberwiseClone() |
Crea una copia superficiale dell'oggetto Object corrente. (Ereditato da Object) |
ToString() |
Restituisce una stringa che rappresenta l'oggetto corrente. (Ereditato da Object) |
TryGetObjectStateEntry(EntityKey, ObjectStateEntry) |
Tenta di recuperare l'oggetto ObjectStateEntry corrispondente per l'oggetto o la relazione con l'oggetto EntityKey specificato. |
TryGetObjectStateEntry(Object, ObjectStateEntry) |
Tenta di recuperare l'oggetto ObjectStateEntry corrispondente per l'oggetto Object specificato. |
TryGetRelationshipManager(Object, RelationshipManager) |
Restituisce l'oggetto RelationshipManager usato dall'oggetto specificato. |
Eventi
ObjectStateManagerChanged |
Si verifica quando le entità vengono aggiunte o rimosse dal gestore degli stati. |