为什么我会收到一个Missing type map configuration错误?
为什么我会收到一个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 IEnumerableInstructors { 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
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的所有值都为空。
为什么我会收到“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类型。