AutoMapper.AspNetCore.OData.EFCore 7.0.1

Prefix Reserved
There is a newer version of this package available.
See the version list below for details.
dotnet add package AutoMapper.AspNetCore.OData.EFCore --version 7.0.1
                    
NuGet\Install-Package AutoMapper.AspNetCore.OData.EFCore -Version 7.0.1
                    
This command is intended to be used within the Package Manager Console in Visual Studio, as it uses the NuGet module's version of Install-Package.
<PackageReference Include="AutoMapper.AspNetCore.OData.EFCore" Version="7.0.1" />
                    
For projects that support PackageReference, copy this XML node into the project file to reference the package.
<PackageVersion Include="AutoMapper.AspNetCore.OData.EFCore" Version="7.0.1" />
                    
Directory.Packages.props
<PackageReference Include="AutoMapper.AspNetCore.OData.EFCore" />
                    
Project file
For projects that support Central Package Management (CPM), copy this XML node into the solution Directory.Packages.props file to version the package.
paket add AutoMapper.AspNetCore.OData.EFCore --version 7.0.1
                    
#r "nuget: AutoMapper.AspNetCore.OData.EFCore, 7.0.1"
                    
#r directive can be used in F# Interactive and Polyglot Notebooks. Copy this into the interactive tool or source code of the script to reference the package.
#addin nuget:?package=AutoMapper.AspNetCore.OData.EFCore&version=7.0.1
                    
Install AutoMapper.AspNetCore.OData.EFCore as a Cake Addin
#tool nuget:?package=AutoMapper.AspNetCore.OData.EFCore&version=7.0.1
                    
Install AutoMapper.AspNetCore.OData.EFCore as a Cake Tool

AutoMapper.Extensions.OData

Creates LINQ expressions from ODataQueryOptions and executes the query.

NuGet Package Downloads

NuGet
NuGet
NuGet

Usage

To use:

  • Configure object maps with explicit expansion.
  • Call the GetAsync or GetQueryAsync extension method from your OData controller. IMapper is an AutoMapper interface.
    public class CoreBuildingMappings : AutoMapper.Profile
    {
        public CoreBuildingMappings()
        {
            CreateMap<TBuilding, CoreBuilding>()
                .ForMember(d => d.Name, o => o.MapFrom(s => s.LongName))
                .ForMember(d => d.Tenant, o => o.MapFrom(s => s.Mandator))
                .ForAllMembers(o => o.ExplicitExpansion());

            CreateMap<TBuilder, OpsBuilder>()
                .ForAllMembers(o => o.ExplicitExpansion());
            CreateMap<TCity, OpsCity>()
                .ForAllMembers(o => o.ExplicitExpansion());
        }
    }
public static async Task<ICollection<TModel>> GetAsync<TModel, TData>(this IQueryable<TData> query, IMapper mapper, ODataQueryOptions<TModel> options, HandleNullPropagationOption handleNullPropagation = HandleNullPropagationOption.Default);
public static async Task<IQueryable<TModel>> GetQueryAsync<TModel, TData>(this IQueryable<TData> query, IMapper mapper, ODataQueryOptions<TModel> options, HandleNullPropagationOption handleNullPropagation = HandleNullPropagationOption.Default);
    public class CoreBuildingController : ODataController
    {

	private readonly IMapper _mapper;
        public CoreBuildingController(MyDbContext context, IMapper mapper)
        {
            Context = context;
            _mapper = mapper;
        }

        MyDbContext Context { get; set; }

        [HttpGet]
        public async Task<IActionResult> Get(ODataQueryOptions<CoreBuilding> options)
        {
            return Ok(await Context.BuildingSet.GetQueryAsync(_mapper, options));
        }
    }

<br><br>

Do not use the EnableQuery Attribute

Using EnableQuery with AutoMapper.Extensions.OData will result in some operations being applied more than once e.g. in the tests, if TMandator has a total of two records then without EnableQuery applied to the controller action, the OData query http://localhost:16324/opstenant?$skip=1&$top=1&$orderby=Name will return one record as expected. However with EnableQuery applied no records will be returned because the skip operation has been applied twice.

<br><br>

OData query examples:

	http://localhost:<port>/opstenant?$top=5&$expand=Buildings&$filter=Name eq 'One'&$orderby=Name desc
	http://localhost:<port>/opstenant?$top=5&$expand=Buildings&$filter=Name ne 'One'&$orderby=Name desc
	http://localhost:<port>/opstenant?$filter=Name eq 'One'
	http://localhost:<port>/opstenant?$top=5&$expand=Buildings&$orderby=Name desc
	http://localhost:<port>/opstenant?$orderby=Name desc
	http://localhost:<port>/opstenant?$orderby=Name desc&$count=true
	http://localhost:<port>/opstenant?$top=5&$filter=Name eq 'One'&$orderby=Name desc&$count=true
	http://localhost:<port>/opstenant?$top=5&$select=Name, Identity
	http://localhost:<port>/opstenant?$top=5&$expand=Buildings&$filter=Name ne 'One'&$orderby=Name desc
	http://localhost:<port>/opstenant?$top=5&$expand=Buildings($expand=Builder($expand=City))&$filter=Name ne 'One'&$orderby=Name desc
	http://localhost:<port>/opstenant?$top=5&$select=Buildings,Name&$expand=Buildings($select=Name,Builder;$expand=Builder($select=Name,City;$expand=City))&$filter=Name ne 'One'&$orderby=Name desc

	http://localhost:<port>/corebuilding?$top=5&$expand=Builder,Tenant&$filter=name ne 'One L1'&$orderby=Name desc
	http://localhost:<port>/corebuilding?$top=5&$expand=Builder($expand=City),Tenant&$filter=name ne 'One L2'&$orderby=Name desc
Product Compatible and additional computed target framework versions.
.NET net8.0 is compatible.  net8.0-android was computed.  net8.0-browser was computed.  net8.0-ios was computed.  net8.0-maccatalyst was computed.  net8.0-macos was computed.  net8.0-tvos was computed.  net8.0-windows was computed.  net9.0 is compatible.  net9.0-android was computed.  net9.0-browser was computed.  net9.0-ios was computed.  net9.0-maccatalyst was computed.  net9.0-macos was computed.  net9.0-tvos was computed.  net9.0-windows was computed.  net10.0 was computed.  net10.0-android was computed.  net10.0-browser was computed.  net10.0-ios was computed.  net10.0-maccatalyst was computed.  net10.0-macos was computed.  net10.0-tvos was computed.  net10.0-windows was computed. 
Compatible target framework(s)
Included target framework(s) (in package)
Learn more about Target Frameworks and .NET Standard.

NuGet packages (1)

Showing the top 1 NuGet packages that depend on AutoMapper.AspNetCore.OData.EFCore:

Package Downloads
RESTworld.AspNetCore

Package Description

GitHub repositories

This package is not used by any popular GitHub repositories.

Version Downloads Last updated
7.0.2 1,716 5/10/2025
7.0.1 1,523 4/23/2025
7.0.0 27,921 2/15/2025
6.1.1 12,932 1/19/2025
6.1.0 5,389 1/3/2025
6.0.0 17,229 11/27/2024
5.0.2 680,177 7/27/2024
5.0.1 48,599 6/13/2024
5.0.0 674,018 2/19/2024
4.0.2 58,483 12/28/2023
4.0.1 159,224 8/19/2023
4.0.0 328,502 10/1/2022
3.0.6 22,499 10/1/2022
3.0.5 208,426 6/17/2022
3.0.4 23,294 4/15/2022
3.0.3 3,811 4/5/2022
3.0.2 3,378 2/26/2022
3.0.1 10,038 2/12/2022
3.0.0 6,571 1/31/2022
2.2.2 79,821 10/21/2021
2.2.1 54,146 8/9/2021
2.2.0-preview.1 2,349 4/10/2021
2.1.1 147,068 2/28/2021
2.1.1-preview.0 303 2/22/2021
2.1.0 41,559 11/27/2020
2.0.3-preview.2 325 11/12/2020
2.0.3-preview.1 334 11/9/2020
2.0.3-preview.0 975 11/2/2020
2.0.2 48,310 10/26/2020
2.0.2-preview.1 314 10/22/2020
2.0.2-preview.0 1,281 9/16/2020
2.0.1 3,294 9/8/2020
2.0.1-preview.1.2 320 9/8/2020
2.0.1-preview.1 312 9/4/2020
2.0.1-preview.0 524 8/26/2020
2.0.0 203,253 7/8/2020
1.0.5 21,658 5/25/2020
1.0.4-preview03 514 5/17/2020
1.0.3 1,546 5/3/2020
1.0.2-preview04 479 4/29/2020
1.0.1 3,603 2/9/2020
1.0.1-preview02 563 2/5/2020
1.0.1-preview01 476 2/4/2020
1.0.0 32,947 9/11/2019
1.0.0-preview07 497 9/9/2019

Supporting AutoMapper v14 (EF Core only).