I have a table called employee and have several columns like EmpID,FirstName,MiddleName,LastName,Address,EmailID,RegionID,DesgID 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 employee table
[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<EmployeeModel> 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<EmployeeModel, RegionModel, StateModel, CountryModel,DesignationModel, EmployeeModel>(query,
(employee, region, state, country, designation) =>
{
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<EmployeeModel>
{
public EmployeeModelMapper()
{
Map(m => m.Region).Ignore();
Map(m => m.Designation).Ignore();
Map(m => m.First).Column("FirstName"); //Trying to map table column FirstName to variable First (Fails in the case of Multimapping)
AutoMap();
}
}
In the above example, I m trying to Map table column FirstName to the class variable First but it fails in the case of running Query using Dapper connection.Query() refer the AllEmployees() method in the EmployeeModel class.
Also another option I tried using Dapper Mapper extension, that also can be found in the above code, refer EmployeeModelMapper class.
My Problem:
How to map all table columns to corresponding their class variables for common use in Dapper and extensions.