【问题标题】:Exception in Automapper Mapping and how to frame the class structure properlyAutomapper 映射中的异常以及如何正确构建类结构
【发布时间】:2014-08-18 00:13:02
【问题描述】:

当我尝试达到要求时,我面临以下问题。

  1. 在控制器中,我使用 automapper 将“Viewmodel”类映射到“Entities”类,但出现异常。我使用 Automapper 异常类捕获异常,结果是:

    缺少类型映射配置或不支持的映射

    映射类型:

    EmpDetails -> StaffMember Org.Entities.EmpDetails -> Org.Web.Models.StaffMember

    目标路径: 列表`1[0]

    来源价值: Org.Entities.EmpDetails

  2. 在数据访问层中,当我将值添加到下拉列表时,我得到 Exception ,请告知我这些类的格式/设计是否正确,并帮助我摆脱这些问题。

PFB 屏幕截图和代码:

异常截图

控制器中的 Automapper 异常:

DAL 中的 DropDown 异常:

代码:

控制器:-

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; }
}

实体层:-

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; }
}

业务层:-

    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;
}

【问题讨论】:

    标签: c# .net asp.net-mvc asp.net-mvc-4 automapper


    【解决方案1】:

    您需要为 StaffDetails 集合创建一个映射

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-08-18
      • 2023-03-13
      • 1970-01-01
      • 2022-01-26
      • 1970-01-01
      • 2016-08-04
      • 2017-06-11
      • 1970-01-01
      相关资源
      最近更新 更多