Skip to content

DevExpress-Examples/XPO_how-to-implement-odata4-service-with-xpo-netcore

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

85 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

How to Implement OData v4 Service with XPO (.NET 8)

Note: It is much easier to use the Web API Service with integrated authorization & CRUD operations based on ASP.NET Core OData 8.0 (OData v4) powered by EF Core and XPO ORM library instead. For more information, see A 1-Click Solution for CRUD Web API Services with Role-based Access Control via EF Core & XPO (FREE).


This example demonstrates how to create an ASP.NET 8 project and provide a simple REST API using the XPO ORM for data access. For the .NET Framework-based example, refer to How to Implement OData v4 Service with XPO (.NET Framework).

Prerequisites

Steps To Implement

Step 1: Create Solution and Add Required Dependencies

  • Create a new ASP.NET Core Web Application project and select the API project template.
  • Install the following NuGet packages:
    • DevExpress.Xpo
    • Microsoft.AspNetCore.OData
  • Add files from the CS\ODataService\Helpers folder in this example to your project (Quick Tip: Add files to Visual Studio projects the easy way). These files contain helpers for demo data generation, LINQ and OData API extensions that will be used later.

Step 2: Define XPO and EDM Data Model

Step 3. Initialize Data Layer and Configure ASP.NET Core Middleware

  • Specify a connection string for your database in the CS\ODataService\appsettings.json file (Microsoft SQL Server LocalDB is used by default).
  "ConnectionStrings": {
    "MSSqlServer": "XpoProvider=MSSqlServer;data source=(LocalDB)\\MSSQLLocalDB;Integrated Security=true;MultipleActiveResultSets=true;initial catalog=ODataTest"
  }
  • Modify the ConfigureServices() method in the Startup.cs file to initialize the data layer and register XPO UnitOfWork and OData services in Dependency Injection.
public void ConfigureServices(IServiceCollection services) {
    services.AddControllers()
        .AddOData(opt => opt
            .Select()
            .Filter()
            .OrderBy()
            .Expand()
            .Count()
            .SetMaxTop(null)
            .AddRouteComponents("odata", SingletonEdmModel.GetEdmModel()));

    services.AddSingleton<IObjectModelValidator, CustomModelValidator>();

    services.AddXpoDefaultUnitOfWork(true, (DataLayerOptionsBuilder options) =>
        options.UseConnectionString(Configuration.GetConnectionString("MSSqlServer"))
        .UseAutoCreationOption(AutoCreateOption.DatabaseAndSchema) // debug only
        .UseEntityTypes(ConnectionHelper.GetPersistentTypes()));
}
  • Modify the Configure() method in the Startup.cs file to configure routing and map controllers:
public void Configure(IApplicationBuilder app, IWebHostEnvironment env) {
    if (env.IsDevelopment()) {
        app.UseDeveloperExceptionPage();
    }

    app.UseRouting();

    app.UseEndpoints(endpoints => {
        endpoints.MapControllers();
    });
}

Step 4: Implement OData Controllers for CRUD and Actions/Functions

  • In the Controllers folder, add classes inherited from Microsoft.AspNet.OData.ODataController for each data model class created on the second step.
  • Implement the required methods in OData controllers (e.g., Get, Post, Put, Patch, Delete, etc.) as shown in this example (for instance, CS\ODataService\Controllers\CustomersController.cs).
  • Implement methods in an OData Controller for required OData Actions and Functions as shown in CS\ODataService\Controllers\ActionsController.cs.

Does this example address your development requirements/objectives?

(you will be redirected to DevExpress.com to submit your response)

About

How to Implement OData v4 Service with XPO

Topics

Resources

License

Stars

Watchers

Forks

Contributors 12

Languages