Вычисленные свойства в OData 4 - PullRequest
0 голосов
/ 14 сентября 2018

Я пытаюсь предоставить вычисляемое свойство только для чтения через службу OData v4 с помощью веб-API.В моих поисках появляются только сообщения от 2014 года и старше, единственными решениями являются либо устаревший код, либо обещание, что вычисленные свойства будут поддерживаться в следующей версии OData (я уверен, что с тех пор было несколько «следующих версий»).).

Для моего примера я буду использовать класс Person с комбинированным FullName:

public class Person
{
    public int ID { get; set; }
    public string FirstName { get; set; }
    public string LastName { get; set; }

    // My calculated property.
    public string FullName
    {
        get
        {
            return FirstName + " " + LastName;
        }
    }
}

Это мой WebAPIConfig:

using System.Web.Http;
using System.Web.OData.Builder;
using System.Web.OData.Extensions;
using TestService.Models;

namespace TestService
{
    public static class WebApiConfig
    {
        public static void Register(HttpConfiguration config)
        {
            ODataConventionModelBuilder builder = new ODataConventionModelBuilder();

            builder.EntitySet<Person>("People");

            config.MapODataServiceRoute("ODataRoute", null, builder.GetEdmModel());
        }
    }
}

В настоящее время JSON не отображает FullName.Что нужно сделать, чтобы сделать это в текущей версии всего?

Редактировать: Добавление моего контроллера для моего Person объекта:

using System.Web.Http;
using System.Web.OData;
using TestService.Models;

namespace TestService.Controllers
{
    public class PeopleController : ODataController
    {
        DataContext db = new DataContext();

        protected override void Dispose(bool disposing)
        {
            db.Dispose();
            base.Dispose(disposing);
        }

        [EnableQuery]
        public IQueryable<Person> Get()
        {
            return db.People;
        }

        [EnableQuery]
        public SingleResult<Person> Get([FromODataUri] int key)
        {
            IQueryable<Person> result = db.People.Where(p => p.ID == key);
            return SingleResult.Create(result);
        }
    }
}
...