public static string GetNameFromCustomAttributeOrDefault(this MemberWrapper member)
        {
            var attr1 = member.GetCustomAttribute <SqlColumnAttribute>();
            var attr2 = member.GetCustomAttribute <ColumnAttribute>();

            if (!string.IsNullOrEmpty(attr1?.MapTo))
            {
                return(attr1.MapTo);
            }
            if (!string.IsNullOrEmpty(attr2?.Name))
            {
                return(attr2.Name);
            }
            return(member.Name);
        }
        public static bool IsMemberAnIdentityColumn(this MemberWrapper member)
        {
            if (member.ShouldMemberBeIgnored())
            {
                return(false);
            }
            var sqlColumnAttribute      = member.GetCustomAttribute <SqlColumnAttribute>();
            var dataAnnotationAttribute = member.GetCustomAttribute <DatabaseGeneratedAttribute>();

            return
                ((dataAnnotationAttribute?.DatabaseGeneratedOption == DatabaseGeneratedOption.Identity ||
                  dataAnnotationAttribute?.DatabaseGeneratedOption == DatabaseGeneratedOption.Computed) ||
                 (sqlColumnAttribute?.IsIdentityKey == true)
                );
        }
Example #3
0
        /// <summary>
        /// Deserialize the value using the corresponding deserializer func if the <paramref name="member"/> is decorated with <c>[SqlColumn]</c> attribute and
        /// SerializableType is defined
        /// </summary>
        /// <param name="member">a wrapper of FastMember.Member </param>
        /// <param name="value">database value</param>
        /// <param name="xmlDeserializer">Func that will be used to deserialize a database value</param>
        /// <param name="jsonDeserializer">Func that will be used to deserialize a database value</param>
        /// <param name="csvDeserializer">Func that will be used to deserialize a database value</param>
        private static void DeserializeMemberValueIfNeeded(MemberWrapper member, ref object value, Func <string, Type, object> xmlDeserializer, Func <string, Type, object> jsonDeserializer, Func <string, Type, object> csvDeserializer)
        {
            var sqlAttribute = member.GetCustomAttribute <SqlColumnAttribute>();

            if (sqlAttribute != null && sqlAttribute.SerializableType != SerializableType.None)
            {
                switch (sqlAttribute.SerializableType)
                {
                case SerializableType.Xml:
                    if (xmlDeserializer == null)
                    {
                        throw new ArgumentNullException(nameof(xmlDeserializer), ExceptionHelper.NullDeSerializer(sqlAttribute.SerializableType, member.Name));
                    }
                    value = xmlDeserializer.Invoke(value as string, member.Type);
                    break;

                case SerializableType.Json:
                    if (jsonDeserializer == null)
                    {
                        throw new ArgumentNullException(nameof(jsonDeserializer), ExceptionHelper.NullDeSerializer(sqlAttribute.SerializableType, member.Name));
                    }
                    value = jsonDeserializer.Invoke(value as string, member.Type);
                    break;

                case SerializableType.Csv:
                    if (csvDeserializer == null)
                    {
                        throw new ArgumentNullException(nameof(csvDeserializer), ExceptionHelper.NullDeSerializer(sqlAttribute.SerializableType, member.Name));
                    }
                    value = csvDeserializer.Invoke(value as string, member.Type);
                    break;
                }
            }
        }
        public static bool IsMemberASerializableColumn(this MemberWrapper member)
        {
            if (member.ShouldMemberBeIgnored())
            {
                return(false);
            }
            var attr1 = member.GetCustomAttribute <SqlColumnAttribute>();

            if (attr1?.SerializableType == null)
            {
                return(false);
            }
            switch (attr1.SerializableType)
            {
            case SerializableType.None:
                return(false);

            case SerializableType.Xml:
                return(true);

            case SerializableType.Json:
                return(true);

            case SerializableType.Csv:
                return(true);

            default:
                throw new ArgumentOutOfRangeException();
            }
        }
        //public static object GetMemberValue(this MemberWrapper member, object instanceOfObject , Func<object, string> xmlDeserializer, Func<object, string> jsonDeserializer, Func<object, string> csvDeserializer)
        //{
        //    var value = ExtFastMember.GetMemberValue(instanceOfObject, member.Name);
        //    var sqlAttribute = member.GetCustomAttribute<SqlColumnAttribute>();
        //    if (sqlAttribute != null && sqlAttribute.SerializableType != SerializableType.NONE)
        //    {
        //        switch (sqlAttribute.SerializableType)
        //        {
        //            case SerializableType.XML:
        //                value = xmlDeserializer.Invoke(value);
        //                break;
        //            case SerializableType.JSON:
        //                value = jsonDeserializer.Invoke(value);
        //                break;
        //            case SerializableType.CSV:
        //                value = csvDeserializer.Invoke(value);
        //                break;
        //        }
        //    }
        //    return value;
        //}

        public static bool ShouldMemberBeIgnored(this MemberWrapper member)
        {
            var attr1 = member.GetCustomAttribute <SqlColumnAttribute>();

            if (attr1?.Ignore == true)
            {
                return(true);
            }
            var attr2 = member.GetCustomAttribute <NotMappedAttribute>();

            if (attr2 != null)
            {
                return(true);
            }
            return(false);
        }
        public static bool IsMemberIgnoredForInsertSql(this MemberWrapper member)
        {
            var attr1 = member.GetCustomAttribute <SqlColumnAttribute>();

            if (attr1?.IsReadOnly == true)
            {
                return(true);
            }
            return(false);
        }
Example #7
0
        /// <summary>
        /// Converts to database value. If value is null convert it to DBNull.Value or if property is decorated with a serializable attribute
        /// then convert the value to its serialize self
        /// </summary>
        /// <param name="member">The member.</param>
        /// <param name="value">The value.</param>
        /// <param name="csvSerializer"></param>
        /// <param name="xmlSerializer"></param>
        /// <returns>System.Object.</returns>
        public object ConvertToDatabaseValue(MemberWrapper member, object value, Func <object, string> xmlSerializer, Func <object, string> jsonSerializer, Func <object, string> csvSerializer)
        {
            if (value == null)
            {
                return(DBNull.Value);
            }
            //if (member.Type == typeof(DateTime) && (DateTime)value == DateTime.MinValue || member.Type == typeof(DateTime?) && (DateTime)value == DateTime.MinValue)
            //{
            //    if(DatabaseType == DataBaseType.SqlServer)
            //        return new DateTime(1753, 01, 01);
            //}
            if (member.GetCustomAttribute <SqlColumnAttribute>()?.SerializableType != SerializableType.None)
            {
                switch (member.GetCustomAttribute <SqlColumnAttribute>()?.SerializableType)
                {
                case SerializableType.Xml:
                    xmlSerializer.IsNullThrow(nameof(xmlSerializer), new ArgumentNullException(nameof(xmlSerializer), $"{ExceptionHelper.NullSerializer(member, SerializableType.Xml)}"));
                    return(xmlSerializer.Invoke(value));

                case SerializableType.Json:
                    jsonSerializer.IsNullThrow(nameof(jsonSerializer), new ArgumentNullException(nameof(jsonSerializer), $"{ExceptionHelper.NullSerializer(member, SerializableType.Json)}"));
                    return(jsonSerializer.Invoke(value));

                case SerializableType.Csv:
                    csvSerializer.IsNullThrow(nameof(csvSerializer), new ArgumentNullException(nameof(csvSerializer), $"{ExceptionHelper.NullSerializer(member, SerializableType.Csv)}"));
                    return(csvSerializer.Invoke(value));

                case SerializableType.None:
                case null:
                    break;

                default:
                    throw new ArgumentOutOfRangeException();
                }
            }
            return(value);
        }