Search code examples
c#.netdapper

Dapper and Enums as Strings


I am trying to use Dapper and Dapper-Extensions and to serialize my enums on the database as string.

Right now they are serialized as integers (inside a VARCHAR field) instead.

Is there any way to do this? Any custom type mapping that I can add?


Solution

  • Thanks to Marc Gravell reply:

    The only way is to do the inserts manually.

    Also using the following post: How do I perform an insert and return inserted identity with Dapper?

    Below my solution.

    Note that selects work automatically: you can use Dapper (Extensions) directly GetList<T>, there is no mapping to the enum back required.

    public enum ComponentType
    {
        First,
        Second,
        Third
    }
    
    public class Info
    {
        public int Id { get; set; }
        public ComponentType InfoComponentType { get; set; }
    
        public static void SaveList(List<Info> infoList)
        {
            string ConnectionString = GetConnectionString();
    
            using (SqlConnection conn = new SqlConnection(ConnectionString))
            {
                conn.Open();
    
                foreach (Info info in infoList)
                {
                    string sql = @"INSERT INTO [Info] ([InfoComponentType]) 
                                   VALUES (@InfoComponentType);
                                   SELECT CAST(SCOPE_IDENTITY() AS INT)";
    
                    int id = conn.Query<int>(sql, new
                    {
                        InfoComponentType = info.InfoComponentType.ToString()
                    }).Single();
    
                    info.Id = id;
                }
    
                conn.Close();
            }
        }
    }