具有EntityFramework的Web API OData仅公开DTO

时间:2016-05-17 02:45:35

标签: entity-framework asp.net-web-api odata asp.net-web-api2

我不想公开我的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?

0 个答案:

没有答案