Dapper.Contrib icon indicating copy to clipboard operation
Dapper.Contrib copied to clipboard

About Dapper Column Mapper Design ~ ^-^

Open cotide opened this issue 7 years ago • 0 comments

hi ~ my database table design :

create table `users_orders` (
  `id` int(11) unsigned not null auto_increment,
  `users` int(11) not null,
  `orderno` varchar(32) not null,
  `normal_fee` decimal(10,2) null 
)

my object class :

  public class UserOrder: EntityByType
    { 
        [Column(Name = "id")]
        public  int Id { get; set; }
          
        [Column(Name = "users")] 
        public  int UserId { get; set; }
 
        [Column(Name = "orderno")]
        public string OrderNo { get; set; }
 
        [Column(Name = "normal_fee")]
        public  decimal NormalFee { get; set; }
          
 }

my class mapper :

       // TableName Mapper
       SqlMapperExtensions.TableNameMapper = (type) =>
            {
                var tableattr = type.GetCustomAttributes(false).SingleOrDefault(attr => attr.GetType().Name == "TableAttribute") as dynamic;
                if (tableattr != null)
                    return tableattr.Name;

                var name = type.Name;
                if (type.IsInterface && name.StartsWith("I"))
                    name = name.Substring(1);
                return name;
            };

    // Column Mapper
    SqlMapper.SetTypeMap(typeof(UserOrder), new CustomPropertyTypeMap(typeof(UserOrder), (type, columnName) => type.GetProperties()
                .FirstOrDefault(prop => prop.GetCustomAttributes(false).OfType<ColumnAttribute>()
                    .Any(attr => attr.Name.Equals(columnName, StringComparison.OrdinalIgnoreCase)))));

it can query right , but update or insert not working

my update use 'Dapper.Contrib.Extensions'

public static bool Update<T>(this IDbConnection connection, T entityToUpdate, IDbTransaction transaction = null, int? commandTimeout = null) where T : class;

error message:

Unknown column 'UserId'

cotide avatar Apr 23 '18 13:04 cotide