为什么我会收到一个Missing type map configuration错误?

19 浏览
0 Comments

为什么我会收到一个Missing type map configuration错误?

我修改了这个ContosoUniversity教程:http://www.asp.net/mvc/tutorials/getting-started-with-ef-using-mvc/creating-an-entity-framework-data-model-for-an-asp-net-mvc-application,现在我正在尝试使用AutoMapper来进行对象之间的映射。

这是我的ModelView:

public class InstructorIndexData
{
    public IEnumerable Instructors { get; set; }
    public IEnumerable Courses { get; set; }
    public IEnumerable Enrollments { get; set; }
    public IEnumerable Students { get; set; }
    public IEnumerable Assignments { get; set; }
}

这是视图:

@model SchoolIn.ViewModels.InstructorIndexData

@using SchoolIn.Models

@{ViewBag.Title = "Index";}

@using (Html.BeginForm("ClassAttendance", "Attendance",

new { currentDate = day, id = @ViewBag.ID,

teacher = HttpContext.Current.Session["sTeacher"],

courseID = HttpContext.Current.Session["sCourseID"] }, FormMethod.Post))

{

var wekdys = new Enrollment(); @*创建这个变量是为了访问下拉列表*@

@Html.DropDownList("weekDays", wekdys.WeekDays.Select(s =>

new SelectListItem { Text = s.ToString(), Value = s.ToString() }))

@Html.ValidationSummary(true)

@Html.ActionLink("Create Todays Attendance", "Create")

@Html.ActionLink("Create New", "Create")

Students Enrolled in @ViewBag.teacherName's @ViewBag.courseTitle Course

@foreach (var item in Model.Enrollments)

{

}

View Student Report First Name Last Name Grade Attendance Code Class Day

@Html.ActionLink("Report", "UpdateAttendance", "Attendance",

new {

grade=item.Grade,

studentFirstName = item.Student.FirstMidName,

studentLastName = item.Student.LastName,

courseTitle = item.Course.Title,

teacher = @ViewBag.teacherName }, null)

@Html.EditorFor(modelItem=>item.Student.FirstMidName) @Html.EditorFor(modelItem=>item.Student.LastName) @Html.EditorFor(modelItem =>item.Grade) @Html.DropDownList("attendanceCode", item.attendanceCode.Select(s =>

new SelectListItem { Text = s.ToString(), Value = s.ToString() }))

@*Html.EditorFor(modelItem =>item.attendanceCode)*/*@

@Html.EditorFor(modelItem=>item.classDays)

}

这是我在控制器中遇到问题的方法。我正在尝试使用这个例子:http://chriscurrie.co.uk/blog/2011/09/coding/net/mvc/use-automapper-to-map-viewmodels-to-entities-mvc3-and-razor/

public class AttendanceController : Controller
{
    private SchoolInDB db = new SchoolInDB();
}

代码在这里...

[HttpPost]
public ActionResult ClassAttendance(InstructorIndexData viewModel)
{
    if (ModelState.IsValid)
    {
        AutoMapper.Mapper.CreateMap();
        AutoMapper.Mapper.CreateMap();
        AutoMapper.Mapper.CreateMap();
        AutoMapper.Mapper.CreateMap();
        Instructor newInstructor = new Instructor();
        Student newStudent = new Student();
        Assignment newAssignment = new Assignment();
        Enrollment newEnrollment = new Enrollment();
        AutoMapper.Mapper.Map(viewModel, newInstructor );
        AutoMapper.Mapper.Map(viewModel, newStudent);
        AutoMapper.Mapper.Map(viewModel, newEnrollment);
        AutoMapper.Mapper.Map(viewModel, newAssignment);
        db.Assignments.AddObject(newAssignment).;
        db.SaveChanges();
        return RedirectToAction("Index");
    }
    return View();
}

当我调试时,我的代码在‘AutoMapper.Mapper.Map(viewModel, newInstructor );’处停止,并显示以下错误:

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

映射类型:

InstructorIndexData -> Instructor

SchoolIn.ViewModels.InstructorIndexData -> SchoolIn.Models.Instructor

目标路径:

Instructor

源值:

SchoolIn.ViewModels.InstructorIndexData

我还注意到在我的ActionResult(InstructorIndexData viewModel)中,viewModel的所有值都为空。

0
0 Comments

为什么我会收到“Missing type map configuration”错误?

根据我的理解,viewModel的类型是InstructorIndexData。如果是这样的话,你需要添加以下配置:

    AutoMapper.Mapper.CreateMap<InstructorIndexData, Assignment>();
    AutoMapper.Mapper.CreateMap<InstructorIndexData, Enrollment>();
    AutoMapper.Mapper.CreateMap<InstructorIndexData, Student>();
    AutoMapper.Mapper.CreateMap<InstructorIndexData, Instructor>();

谢谢,我已经更改了CreateMap<>,现在代码停在了db.SaveChanges()这里,并显示错误信息:"The conversion of a datetime2 data type to a datetime data type resulted in an out-of-range value. The statement has been terminated." 这可能是因为ViewModel在这里'ActionResult(InstructorIndexData viewModel'中有空值吗?

这是一个拼写错误吗,"datetime2 data type to a datetime",还是你真的有datetime2类型?

这个问题与AutoMapper无关。建议你提出一个单独的问题。无论如何,以下是关于此主题的一些链接:stackoverflow.com/questions/1678474/… stackoverflow.com/questions/4608734/…

这不是一个拼写错误...我在视图中使用datetime,但不是datetime2。

DateTime在数据库中被映射为datetime2类型。

你还有其他问题吗?

当尝试将未初始化的DateTime属性保存到使用Entity Framework创建的数据库时,会出现错误"The conversion of a datetime2 data type to a datetime data type resulted in an out-of-range value..." (T-SQL列类型为datetime,最小值为1753年1月1日,与默认/最小值为DateTime的Jan 1, 0001进行比较)。要修复这个问题,你必须将属性设置为T-SQL datetime范围内的非默认值,或者使用EF6,使用T-SQL datetime2类型。

0