select-关键字不适用于odata,automapper和efcore

时间:2019-04-20 11:29:19

标签: asp.net-core odata automapper ef-core-2.0

我正在尝试将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>();
    }
}

我需要一些特定的映射吗?

1 个答案:

答案 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();
    }

现在它可以正常工作了