select - 键盘不适用于 odata、automapper 和 ef core
select - keyword not working with odata, automapper and efcore
我正在尝试将 odata 查询应用于我的自动映射器 - 在我的 efcore 上下文中进行映射。在我使用 $select 查询选项之前,一切都按预期工作。
当我尝试在对我的 odata - 控制器的请求中使用 select 关键字时,出现异常:
SerializationException: 'SourceSourceInjectedQuery`2' cannot be serialized using the 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>();
}
}
我需要一些特定的映射来执行此操作吗?
我发现我的 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();
}
现在一切正常
我正在尝试将 odata 查询应用于我的自动映射器 - 在我的 efcore 上下文中进行映射。在我使用 $select 查询选项之前,一切都按预期工作。
当我尝试在对我的 odata - 控制器的请求中使用 select 关键字时,出现异常:
SerializationException: 'SourceSourceInjectedQuery`2' cannot be serialized using the 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>();
}
}
我需要一些特定的映射来执行此操作吗?
我发现我的 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();
}
现在一切正常