I want to be able to tell if there is any unsaved data in an entity framework context. I have figured out how to use the ObjectStateManager to check the states of existing e
This article describes exactly what is needed to perform Change Tracking in the Entity Framework:
Identity Resolution, State Management, and Change Tracking (Entity Framework) - MSDN
var addedStateEntries = Context
.ObjectStateManager
.GetObjectStateEntries(EntityState.Added);
A simple way to get a reusable single method/property you could add a new method to your ObjectContext by creating a partial class and adding a property like this:
public partial class MyEntityContext
{
public bool IsContextDirty
{
get
{
var items = ObjectStateManager.GetObjectStateEntries(EntityState.Added);
if(items.Any())
return true;
items = ObjectStateManager.GetObjectStateEntries(EntityState.Deleted);
if (items.Any())
return true;
items = ObjectStateManager.GetObjectStateEntries(EntityState.Modified);
if(items.Any())
return true;
return false;
}
}
}
Depending on what your looking for you could expose other properties to know if there are just deletes or modifications. This method could be simplified, but I wanted it to be clear what you would need to do.
Via extension method (for every ObjectContext):
internal static class ObjectContextExtensions
{
public static bool IsContextDirty(this ObjectContext objectContext)
{
return objectContext
.ObjectStateManager
.GetObjectStateEntries(
EntityState.Added |
EntityState.Deleted |
EntityState.Modified).Any();
}
}
or via partial method (only for your ObjectContext):
partial class MyModel
{
public bool IsContextDirty()
{
return ObjectStateManager
.GetObjectStateEntries(
EntityState.Added |
EntityState.Deleted |
EntityState.Modified).Any();
}
}