Skip to content

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&#0091;"@Created"&#0093;.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&#0091;"@Updated"&#0093;.Value = now;
            }
        }