I am facing the below issues when I try to achieve the requirement.
In controller I have used automapper to map "Viewmodel" class with "Entities" class but I am getting exception.I used Automapper exception class to catch the exception, the result is :
Missing type map configuration or unsupported mapping
Mapping types:
EmpDetails -> StaffMember Org.Entities.EmpDetails -> Org.Web.Models.StaffMember
Destination path: List`1[0]
Source value: Org.Entities.EmpDetails
In Data access layer when I am adding the value to dropdown I am getting Exception , Please advise me whether the classes are well formed/designed and help me out to get rid of these issues.
PFB Screen shots and Codes:
Exception ScreenShots
Exception for Automapper in Controller:
Exception For DropDown in DAL:
Code:
Controller:-
EmployeeStatus oStatusBL = new EmployeeStatus(); // Business layer class
public ActionResult Index()
{
EmpStatusDetails oStaff = oStatusBL.getEmpStatusDetails();
StaffMemberList oLsit = new StaffMemberList();
Mapper.CreateMap<EmpStatusDetails, StaffMemberList>();
Mapper.Map<EmpStatusDetails, StaffMemberList>(oStaff); // Exception Occurs here
ViewBag.StateDropDown = oStatusBL.GetStateDropDown();
return View(oLsit);
}
ViewModel:-
public class StaffMember
{
public string FullName { get; set; }
public string FullAddress { get; set; }
public string StatusMessage { get; set; }
public DateTime DateCreated { get; set; }
public int UserID { get; set; }
}
public class StaffMemberList
{
public List<StaffMember> StaffDetails { get; set; }
public Status StatusDetails { get; set; }
public Users UserDetails { get; set; }
}
public class Status
{
[Required(ErrorMessage = "Please select Name")]
public int UserID { get; set; }
[Required(ErrorMessage = "Status Message is Required")]
[RegularExpression(@"^[\w\d]+$", ErrorMessage = "Avoid Special characters")]
[StringLength(250, ErrorMessage = "Exceeds 250 Character")]
public string Statusmessage { get; set; }
public DateTime DateCreated { get; set; }
public IEnumerable<SelectListItem> DropDownNameList { get; set; }
}
public class Users
{
public int UserID { get; set; }
[Required(ErrorMessage = "First Name is Required")]
public string FirstName { get; set; }
[Required(ErrorMessage = "Last Name is Required")]
public string LastName { get; set; }
[Required(ErrorMessage = "Address is Required")]
[RegularExpression("^[a-zA-Z0-9\\s,'-]*$", ErrorMessage = "Invalid Address")]
[StringLength(250, ErrorMessage = "Exceeds 250 Character")]
public string Address { get; set; }
[Required(ErrorMessage = "City is Required")]
[RegularExpression("^[a-zA-Z]+$", ErrorMessage = "Invalid City")]
[StringLength(150, ErrorMessage = "Exceeds 150 Character")]
public string City { get; set; }
[Required(ErrorMessage = "State is Required")]
[RegularExpression("^[a-zA-Z]+$", ErrorMessage = "Invalid State")]
public string State { get; set; }
[Required(ErrorMessage = "Zip is Required")]
[RegularExpression("^[0-9]{5}$", ErrorMessage = "Invalid Zipcode")]
public int? Zip { get; set; }
public DateTime DateCreated { get; set; }
}
EntitiesLayer:-
public class EmpDetails
{
public string FullName { get; set; }
public string FullAddress { get; set; }
public string StatusMessage { get; set; }
public DateTime DateCreated { get; set; }
public int UserID { get; set; }
public StatusEntity StatusDetails { get; set; }
}
public class EmpStatusDetails
{
public List<EmpDetails> StaffDetails { get; set; }
public StatusEntity StatusDetails { get; set; }
public UserEntity UserDetails { get; set; }
}
public class StatusEntity
{
public int UserID { get; set; }
public string Statusmessage { get; set; }
public DateTime DateCreated { get; set; }
public IEnumerable<SelectListItem> DropDownNameList { get; set; }
}
public class UserEntity
{
public int UserID { get; set; }
public string FirstName { get; set; }
public string LastName { get; set; }
public string Address { get; set; }
public string City { get; set; }
public string State { get; set; }
public int? Zip { get; set; }
public DateTime DateCreated { get; set; }
}
BusinessLayer:-
StaffDetailsDAL oDal = new StaffDetailsDAL();
public EmpStatusDetails getEmpStatusDetails()
{
return oDal.EmployeeStatusAndDetails();
}
DataAccessLayer:-
public EmpStatusDetails EmployeeStatusAndDetails()
{
EmpStatusDetails oEmp = new EmpStatusDetails(); // Entity layer class
List<User> us = dbContext.Users.Select(o => o).ToList();
List<EmpDetails> oStaffList = (from usrs in dbContext.Users
join stats in dbContext.StatusUpdates on usrs.UserID equals stats.UserID
where stats.Statusmessage !=null
select new EmpDetails { FullName = usrs.FirstName + " " + usrs.LastName, FullAddress = usrs.Address + "," + usrs.State + "," + usrs.City + "," + SqlFunctions.StringConvert((double)usrs.Zip), StatusMessage = stats.Statusmessage, DateCreated = (DateTime)stats.DateCreated, UserID = usrs.UserID }
).OrderBy(x => x.DateCreated).ToList<EmpDetails>();
IEnumerable<SelectListItem> oList = (from val in oStaffList
select new SelectListItem { Text = val.FullName, Value = val.UserID.ToString() }).ToList();
oEmp.StaffDetails = oStaffList;
oEmp.StatusDetails.DropDownNameList = oList; // Exception Occurs here
return oEmp;
}