次はエンテティに関数を生やします。
まずは、ODataConventionsModelBuilderに関数を指定する。
using System.Web.Http; using System.Web.OData.Builder; using System.Web.OData.Extensions; // MapODataServiceRouteに必要using WebApplication5.Controllers; namespace WebApplication5 { publicstaticclass WebApiConfig { publicstaticvoid Register(HttpConfiguration config) { var b = new ODataConventionModelBuilder(); b.EntitySet<Person>("People"); // EntityTypeに関数を生やす var addFunction = b.EntityType<Person>() .Function("Add"); addFunction.Returns<double>(); addFunction.Parameter<double>("x"); addFunction.Parameter<double>("y"); config.MapODataServiceRoute( "ODataRoute", "odata", b.GetEdmModel()); } } }
コントローラーに関数を定義する
普通にメソッドとして定義すればOKです。
[HttpGet] public IHttpActionResult Add(int key, double x, double y) { return Ok(x + y); }
keyには、呼び出したときの対象のエンテティのキーが入ります。今回は無視。
呼び出す
T4テンプレートで生成されるクラスからは、以下のようにして呼び出します。
var c = new Container(new Uri("http://localhost:7650/odata")); var answer = c.People.ByKey(new Dictionary<string, object> { { "Id", 3 } }) .Add(10, 3) .GetValue(); Console.WriteLine(answer);
ByKeyでキー指定して、Addメソッドを呼び出します。