То, как мне это удалось, - когда мой пользователь входит в систему, я сохраняю основную информацию о нем в сеансе.Затем у меня есть класс, который стоит поверх моих действий в контексте.
Всякий раз, когда я фиксирую изменения, я выполняю ту же процедуру, которая проверяет, что изменилось.Я разработал способность инициировать действия, основанные на объекте, с которым работаем (так что я могу следить за чем-то вроде контрактов).Тогда у меня есть пользователь, который может войти в систему.
[Редактировать]
Это сложнее, чем я понял, но я попробую.
Я создаю веб-приложение.Тяжело используя Ninject.
Когда пользователь входит в систему, я сохраняю его информацию в объекте IUserSession (это действительно хранится в Session, но пользовательская область Ninject делает это аккуратным для меня и не дает мне возможности выставлять своислой данных для веб-сессии).Этот объект сеанса пользователя содержит имя пользователя, идентификатор пользователя и т. Д.
Я создал класс, который содержит контекст и упаковывает все вызовы SELECT, CREATE, DELETE и COMMIT.т.е. SELECT;
public IQueryable<TEntity> All<TEntity>( ) {
return Context.Set<TEntity>();
}
Этот класс также имеет метод Commit, это вызов SaveChanges.
Перед вызовом SaveChanges у вас есть доступ к изменениям в форме Context.ChangeTracker..Entities
Для каждой измененной сущности вы можете проверить, была ли она добавлена, удалена или изменена. Чтобы получить тип изменяемого элемента;
Type baseEntityType = ObjectContext.GetObjectType( entity.Entity.GetType( ) );
Я делаюпланирую написать учебник в ближайшее время, основываясь на моем личном опыте с этим (не то, что вам сейчас помогает).