Example #1
0
        /// <summary>
        /// Detects any updates on specified entity state properties.
        /// </summary>
        /// <param name="entity">entity</param>
        /// <param name="originalValues">original properties values</param>
        /// <param name="currentValues">current properties values</param>
        public static void DetectStateUpdates(this IBaseDO entity,
                                              DbPropertyValues originalValues, DbPropertyValues currentValues)
        {
            var stateProperties = entity.GetStateProperties().ToArray();

            if (stateProperties.Length > 0)
            {
                entity.DetectUpdates(originalValues, currentValues, stateProperties,
                                     (entityName, idValue, stateProperty) =>
                {
                    var stateTemplateType =
                        ReflectionHelper.ForeignKeyNavitationProperty(entity, stateProperty).
                        PropertyType;
                    var stateType =
                        GetGenericInterface(stateTemplateType, typeof(IStateTemplate <>))
                        .GetGenericArguments()[0];
                    var stateName     = stateType.Name;
                    var stateKey      = currentValues[stateProperty.Name];
                    string stateValue = null;

                    if (stateKey != null)
                    {
                        var value = stateType.GetFields().FirstOrDefault(f => Equals(f.GetValue(entity), stateKey));
                        if (value != null)
                        {
                            stateValue = value.Name;
                        }
                    }

//                                             stateValue = stateKey != null
//                                                                  ? stateType.GetFields().Single(f => Equals(f.GetValue(entity), stateKey)).Name
//                                                                  : null;

                    EventManager.EntityStateChanged(entityName, idValue, stateName, stateValue);
                });
            }
        }