Вот что я делаю в MyObjectContext конструктор класса:
ObjectStateManager.ObjectStateManagerChanged += ObjectStateManagerObjectStateManagerChanged;
и вот обработчик:
private void ObjectStateManagerObjectStateManagerChanged(object sender, System.ComponentModel.CollectionChangeEventArgs e)
{
if (e.Element is MyClass)
{
var entity = e.Element as MyClass;
var state = ObjectStateManager.GetObjectStateEntry(e.Element).State;
if (e.Action == CollectionChangeAction.Add && state == EntityState.Added)
{
//this is working fine and all created entities 100% hit this point
}
//none of the below is ever resolves to true,
//and I need to be notified on each modified entity
if (e.Action == CollectionChangeAction.Add && state == EntityState.Modified)
{
}
else if (e.Action == CollectionChangeAction.Refresh && state == EntityState.Modified)
{
}
}
}
И все-таки сделайте следующий тест:
var context = new MyObjectContext();
context.SetMergeOption(MergeOption.OverwriteChanges);
var company = new Company
{
Label = "Label",
};
context.Add(company);
context.SaveChanges();
company.Label = company.Label +" and so on";
context.Update(company);
context.SaveChanges();
Не происходит событие об обновлении юридического лица компании.Как я могу это гарантировать?Более интересно то, что компания включена в список сущностей, возвращаемых:
IEnumerable<ObjectStateEntry> changedEntities =
ObjectStateManager.GetObjectStateEntries(EntityState.Modified);
, который вызывается из метода MyObjectContext.SaveChanges()
.
Кто-нибудь знает, почему ObjectStateManagerChanged не вызывается для обновленных объектов?Или как реализовать аналогичную функциональность другим способом?