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) ); }
/// <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); }
/// <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); }