New Features

  • [Issue] [PR] Integrate Microsoft Dependency Injection Framework into RESTier. Tutorial.
  • [Issue] [PR] Support temporal types in Restier.EF. Tutorial.
  • [Issue] [PR] Adopt Web OData Conversion Model builder as default EF provider model builder. Tutorial.
  • [Issue] [PR] Support $apply in RESTier. Tutorial.


  • The concept of hook handler now becomes API service after DI integration.
  • The interface IHookHandler and IDelegateHookHandler are removed. The implementation of any custom API service (previously known as hook handler) should also change accordingly. But this should not be big change. Please see Tutorial for details.
  • AddHookHandler is now replaced with AddService from DI. Please see Tutorial for details.
  • GetHookHandler is now replaced with GetApiService and GetService from DI. Please see Tutorial for details.
  • All the serializers and DefaultRestierSerializerProvider are now public. But we still need to address #301 to allow users to override the serializers.
  • The interface IApi is now removed. Use ApiBase instead. We never expect users to directly implement their API classes from IApi anyway. The Context property in IApi now becomes a public property in ApiBase.
  • Previously the ApiData class is very confusing. Now we have given it a more meaningful name DataSourceStubs which accurately describes the usage. Along with this change, we also rename ApiDataReference to DataSourceStubReference accordingly.
  • ApiBase.ApiConfiguration is renamed to ApiBase.Configuration to keep consistent with ApiBase.Context.
  • The static Api class is now separated into two classes ApiBaseExtensions and ApiContextExtensions to eliminate the ambiguity regarding the previous Api class.

Bug Fixes

  • [Issue] [PR] Fix a bug that prevents using Edm.Int64 as entity key.
  • [Issue] [PR] Fix a bug that NullReferenceException is thrown when POST/PATCH/PUT with null property values.
  • [Issue] [PR] Fix a bug that $count does not work correctly when there is $expand.
  • [Issue] [PR] Fix a bug that GetModelAsync is not thread-safe.
  • [Issue] [PR] Fix a bug that if GetModelAsync takes too long to complete, any subsequent request will fail.
  • [Issue] [PR] Fix a bug that NullReferenceException is thrown when ColumnTypeAttribute does not have a TypeName property specified.
  • [Issue][Issue][Issue][Issue] [PR] Fix various bugs in the RESTier query pipeline.