未映射 属性 和 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 对象后。结果如下:
我在我的项目中使用 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 对象后。结果如下: