public static TPropType GetArticleAttribute <TPropType>(this IArticleAttributeService genericAttributeService, string entityName, int entityId, string key, int siteId = 0)
        {
            Guard.ArgumentNotNull(() => genericAttributeService);
            Guard.ArgumentNotEmpty(() => entityName);

            var props = genericAttributeService.GetAttributesForEntity(entityId, entityName);

            // little hack here (only for unit testing). we should write expect-return rules in unit tests for such cases
            if (props == null)
            {
                return(default(TPropType));
            }

            //if (!props.Any(x => x.SiteId == siteId))
            //{
            //    return default(TPropType);
            //}

            var prop = props.FirstOrDefault(ga => ga.Key.Equals(key, StringComparison.InvariantCultureIgnoreCase)); //should be culture invariant

            if (prop == null || prop.Value.IsEmpty())
            {
                return(default(TPropType));
            }

            return(prop.Value.Convert <TPropType>());
        }