How to intercept and modify entities before insert update delete
Blake Niemyjski edited this page Aug 19, 2015
·
2 revisions
There are times when one wants to modify entity or log data before entity is saved or updated to database. This logic can be implemented to EntityProviderBase.cs files EntityProviderBase<Entity, EntityKey> class by overriding the protected override void OnDataRequesting(CommandEventArgs e) method.
Example: update entities created and updated timestamps if such properties exists in entity:
protected override void OnDataRequesting(CommandEventArgs e)
{
base.OnDataRequesting(e);
if (e.MethodName.Equals("Insert", StringComparison.CurrentCultureIgnoreCase))
{
UpdateCreatedData(e.CurrentEntity, e);
UpdateUpdatedData(e.CurrentEntity, e);
}
else if (e.MethodName.Equals("Update", StringComparison.CurrentCultureIgnoreCase))
{
UpdateUpdatedData(e.CurrentEntity, e);
}
}
private void UpdateCreatedData(Object entity, CommandEventArgs e)
{
Type type = entity.GetType();
PropertyInfo createdProp = type.GetProperty("Created");
if (createdProp != null && createdProp.CanWrite)
{
DateTime now = DateTime.Now;
createdProp.SetValue(entity, now, null);
e.Command.Parameters["@Created"].Value = now;
}
}
private void UpdateUpdatedData(Object entity, CommandEventArgs e)
{
Type type = entity.GetType();
PropertyInfo updatedProp = type.GetProperty("Updated");
if (updatedProp != null && updatedProp.CanWrite)
{
DateTime now = DateTime.Now;
updatedProp.SetValue(entity, now, null);
e.Command.Parameters["@Updated"].Value = now;
}
}