internal IMemberAccessor GetDisplayMember(Type entityType)
        {
            return(_displayCache.GetOrAdd(entityType, key =>
            {
                TypeAccessor typeAccessor = TypeAccessor.GetAccessor(entityType);
                IMemberAccessor displayMember = null;

                var displayAttribute = GetAttribute <DisplayColumnAttribute>(entityType);

                // first try DisplayColumnAttribute property
                if (displayAttribute != null)
                {
                    displayMember = typeAccessor.FindProperty(displayAttribute.DisplayColumn);
                }

                if (displayMember != null)
                {
                    return displayMember;
                }

                var properties = typeAccessor.GetProperties().ToList();

                // try first string property
                displayMember = properties.FirstOrDefault(m => m.MemberType == typeof(string));
                if (displayMember != null)
                {
                    return displayMember;
                }

                // try second property
                return properties.Count > 1 ? properties[1] : null;
            }));
        }