我不想公开我的Entity Framework模型,而且我的控制器公开DTO样式对象。
我试图让我的控制器的Get方法
public IQueryable<PersonDTO> Get(ODataQueryOptions<PersonDTO> query )
购买我不知道如何将ODataQueryOptions应用于db.Persons,以便在SQL中进行过滤。
我最终得到了
public IQueryable<PersonDTO> Get(ODataQueryOptions<PersonEF> query )
{
using (var db = new AppDbContext())
{
var result = (query.ApplyTo(db.Persons) as IQueryable<PersonEF>).Select
(c => new PersonDTO()
{
FirstName = c.FirstName,
LastName = c.LastName,
DateOfBirth = c.DateOfBirth,
Gender = c.Gender
}
);
return result.ToList().AsQueryable();
}
}
为了实现这一点,我将两个类添加到ODataConventionModelBuilder
:在我的Register方法中。
ODataModelBuilder builder = new ODataConventionModelBuilder();
builder.EntitySet<PersonDTO>("PersonDTO");
builder.EntitySet<PersonEF>("Person");
我如何只公开PersonDTO并将ODataQueryOptions过滤器应用于EF的PersonEF?