未映射 属性 和 OData 4 端点无法让 属性 在前端显示

Notmapped property and OData 4 endpoint can't get the property to show on front end

我在我的项目中使用 Entity Framework Core 5 和 OData 4 端点。我遇到 [NotMapped] 属性 没有显示在我的前端使用的问题。我读过 OData 忽略了未映射的属性,但我还没有找到关于如何让 OData 不忽略 属性 的解决方案,这样我就可以在前端使用它而无需将它添加到我的数据库中。

我想要完成的是包括资产中分配的每个类别的计数 table。

这是我的 DTO

public class CategoryDto : DropDownDto
{
    /*
     * String property that gets/sets the category name
     */
    public string CategoryName { get; set; }
    [NotMapped]
    public int Count { get; set; }
}

在我的 CategoriesController 我有这个

public async Task<ActionResult<IQueryable<CategoryDto>>> GetCategories()
{
    var categories = await _context.Categories
            .Include(a => a.Assets)
            .Select(l => new CategoryDto()
            {
                Id = l.Id,
                CategoryName = l.CategoryName,
                Count = l.Assets.Count
            })
            .ToListAsync();
    var categoryDto = _mapper.Map<List<Category>>(categories);

    return Ok(categoryDto);
}

当我 运行 我的应用程序并在 return 上放置断点并查看数据时,我可以看到计数按预期工作。它具有分配给类别的正确资产数量,这正是我想要的

但是当我 运行 邮递员看到这些值时,我得到的只是这个

"value": [
        {
            "id": 1,
            "categoryName": "Computers"
        },
        {
            "id": 2,
            "categoryName": "Tools"
        }
    ]

所以问题是如何让 OData 端点包含未映射的 属性?

任何见解都会很棒,如果需要更多信息,请询问,我会为您提供

在 OData GetEdmModel 方法中,使用以下命令将 [NotMapped] 属性 添加到 IEdmModel 对象。

    IEdmModel GetEdmModel()
    { 
        var odataBuilder = new ODataConventionModelBuilder();
        odataBuilder.EntitySet<Student>("Students");
                    
        odataBuilder.EntityType<Student>().Property(c => c.Score);
        //or using the HasKey method.
        //odataBuilder.EntityType<Student>().HasKey(x => x.Score);

        return odataBuilder.GetEdmModel();
    }

像这样的 Student 模型:

public class Student
{
    public Guid Id { get; set; }
    public string Name { get; set; }
    [NotMapped]
    public int Score { get; set; }
}

在将 [NotMapped] 属性 添加到 IEdmModel 对象之前。结果是这样的:

[NotMapped] 属性 添加到 IEdmModel 对象后。结果如下: