title: How to map database table columns to class properties in Dapper .Net
body: <p>I have a table called <code>employee</code> and have several columns like <code>EmpID,FirstName,MiddleName,LastName,Address,EmailID,RegionID,DesgID</code> and I m using Dapper .Net and extensions to deal with SQL Server Database. I use Dapper SqlExtensions to insert, update, delete functionality and use Dapper multimapper option to fill the details. So I used below class for above <code>employee</code> table</p>
  
  <pre><code>    [Table("employee")] //To map the table to class
      public class EmployeeModel
      {
          [Key] //Denote primary key
          public Int32 EmpID { get; set; }
          [Column("FirstName")] //Trying to map table column FirstName to variable First (Fails)
          public string First { get; set; }
          public string MiddleName { get; set; }
          public string LastName { get; set; }
          public string Address { get; set; }
          public string EmailID { get; set; }
          public Int32 RegionID { get; set; }
          public RegionModel Region { get; set; }
          public DesignationModel Designation { get; set; }
          public Int32 DesgID { get; set; }
  
          public Int32 Add(EmployeeModel Details)
          {
              try
              {
                  using (var connection = DBProviderFactory.GetOpenConnection()) //Creating IDbConnection Here
                  {
                      return Convert.ToInt32(connection.Insert(Details)); //Using Dapper Extension To Insert New Employee Details
                  }
              }
              catch (Exception ex)
              {
                  return -1;
              }
          }
  
          public Int32 Update(EmployeeModel Details)
          {
              try
              {
                  using (var connection = DBProviderFactory.GetOpenConnection())
                  {
                      return Convert.ToInt32(connection.Update(Details)); //Using Dapper Extension to Update Employee Details
                  }
              }
              catch (Exception ex)
              {
                  return -1;
              }
          }
  
  
  
          public IEnumerable&lt;EmployeeModel&gt; AllEmployees()
          {
              try
              {
                  using (var connection = DBProviderFactory.GetOpenConnection())
                  {
                      //Using multi mapper in Dapper to Fill All Employee Details such as region,state,country,designation details etc..
                      string query = @"select e.EmpID,e.FirstName,e.MiddleName,e.LastName,e.Address,e.EmailID
                                       ,r.RegionID as RID,r.Region,s.StateID,s.State,c.CountryID,c.Country,d.DesgID as DID,d.Designation
                                         from employee as e inner join region as r on e.RegionID=r.RegionID
                                             inner join state as s on r.StateID=s.StateID inner join country as c on 
                                                 s.CountryID=c.CountryID inner join designation as d on e.DesgID=d.DesgID";
                      return connection.Query&lt;EmployeeModel, RegionModel, StateModel, CountryModel,DesignationModel, EmployeeModel&gt;(query,
                          (employee, region, state, country, designation) =&gt;
                          {
                              employee.Region = region;
                              region.State = state;
                              state.Country = country;
                              employee.Designation = designation;
                              return employee;
                          }, splitOn: "RID,StateID,CountryID,DID");
                  }
              }
              catch (Exception ex)
              {
                  return null;
              }
          }
  
      }
  
      public class EmployeeModelMapper : ClassMapper&lt;EmployeeModel&gt;
      {
          public EmployeeModelMapper()
          {
              Map(m =&gt; m.Region).Ignore();
              Map(m =&gt; m.Designation).Ignore();
              Map(m =&gt; m.First).Column("FirstName"); //Trying to map table column FirstName to variable First (Fails in the case of Multimapping)
              AutoMap();
          }
      }
  </code></pre>
  
  <p>In the above example, I m trying to Map table column <code>FirstName</code> to the class variable <code>First</code> but it fails in the case of running Query using Dapper <code>connection.Query()</code> refer the <code>AllEmployees()</code> method in the <code>EmployeeModel</code> class.</p>
  
  <p>Also another option I tried using Dapper Mapper extension, that also can be found in the above code, refer <code>EmployeeModelMapper</code> class.</p>
  
  <p>My Problem:</p>
  
  <p>How to map all table columns to corresponding their class variables for common use in Dapper and extensions.</p>