OData server lib for EntityFramework. (alternative RESTier)
The simplest implementation of OData server.
$ dotnet add package ODatalizer.EFCore
$ dotnet add package Microsoft.EntityFrameworkCore.Proxies --version 6.0.*
public void ConfigureServices(IServiceCollection services)
{
// add DbContext and use lazy loading proxies.
services.AddDbContext<SampleDbContext>(opt =>
opts
.UseLazyLoadingProxies()
// If your db provider does not suppot AmbientTransaction, ignore the warning.
.ConfigureWarnings(o => o.Ignore(RelationalEventId.AmbientTransactionWarning)));
// add ODatalizer services
services.AddODatalizer(sp =>
{
// create ODatalizer ep metadata
var ep = new ODatalizerEndpoint(
db: sp.GetRequiredService<SampleDbContext>(),
routeName: "Sample",
routePrefix: "sample");
return new[] { ep };
});
...
}
public void Configure(IApplicationBuilder app, IWebHostEnvironment env, SampleDbContext sample)
{
// use $batch endpoint
app.UseODatalizer();
...
}
When you need to read and write all accesses, custom dynamic controller inherits ODatalizerController<TDbContext>
.
public class SampleController : ODatalizerController<SampleDbContext>
{
public SampleController(IServiceProvider sp) : base(sp)
{
}
}
And you set the controller name to endpoint settings.
// create ODatalizer ep metadata
var ep = new ODatalizerEndpoint(db:sample,
routeName: "Sample",
routePrefix: "sample",
controller: nameof(SampleController));
Auto generate first level navigationlink property endpoint.
Dynamic controller does not support navigationlink segment.
If you need not generate path, create controller action by self in ODataController or ODatalizerController.
See sample project https://github.com/commerble/ODatalizer/tree/master/src/Sample.EFCore