我正在尝试将odata查询应用于我的自动映射器-efcore上下文中的映射。一切正常,直到我使用$ select查询选项。
当我尝试在对odata-控制器的请求中使用select关键字时,出现异常:
SerializationException:'SourceSourceInjectedQuery`2'无法使用ODataMediaTypeFormatter进行序列化。
我正在使用UseAsDataSource-扩展方法,因为建议使用here on github。
这是我的oDataController:
public class StudentsController : ODataController {
private readonly SchoolContext schoolContext;
public StudentsController(SchoolContext schoolContext) {
this.schoolContext = schoolContext;
}
[EnableQuery]
public IActionResult Get() {
return Ok(
schoolContext
.Students
.UseAsDataSource()
.For<StudentVM>()
);
}
}
这是我的EFCore实体:
public class Student {
public int ID { get; set; }
public string LastName { get; set; }
public string FirstMidName { get; set; }
public DateTime EnrollmentDate { get; set; }
public ICollection<Enrollment> Enrollments { get; set; }
}
这是我对自动映射器的映射配置文件:
public class StudentVM {
public int ID { get; set; }
public string LastName { get; set; }
public string FirstMidName { get; set; }
}
public class StudentProfile : Profile {
public StudentProfile() {
CreateMap<Student, StudentVM>();
}
}
我需要一些特定的映射吗?
答案 0 :(得分:0)
我发现我在startup.cs中配置odataservice时出错了
private static IEdmModel GetEdmModel() {
ODataConventionModelBuilder builder = new ODataConventionModelBuilder();
builder.EntitySet<Student>("Students");
builder.EntitySet<Course>("Courses");
return builder.GetEdmModel();
}
我在这里放置实体而不是ViewModel。这是固定代码:
private static IEdmModel GetEdmModel() {
ODataConventionModelBuilder builder = new ODataConventionModelBuilder();
builder.EntitySet<StudentVM>("Students");
builder.EntitySet<CourseVM>("Courses");
return builder.GetEdmModel();
}
现在它可以正常工作了