实体的唯一键必须命名为Id才能使Odata工作?

实体的唯一键必须命名为Id才能使Odata工作?,odata,Odata,如果实体具有名为其他对象的唯一键,OData端点将不起作用 我正在使用一个名为Student的实体,它如下所示 使用系统; 使用System.Collections.Generic; 使用System.ComponentModel.DataAnnotations; 使用System.Linq; 使用System.Threading.Tasks; 名称空间CADERPSAAS.API { 公立班学生 { [关键] 公共int StudentId{get;set;} 公共字符串名称{get;set;

如果实体具有名为其他对象的唯一键,OData端点将不起作用

我正在使用一个名为
Student
的实体,它如下所示

使用系统;
使用System.Collections.Generic;
使用System.ComponentModel.DataAnnotations;
使用System.Linq;
使用System.Threading.Tasks;
名称空间CADERPSAAS.API
{
公立班学生
{
[关键]
公共int StudentId{get;set;}
公共字符串名称{get;set;}
}
}
然后我在我的
启动中配置它,如下所示

//配置()

public void配置(IApplicationBuilder应用程序、IWebHostEnvironment环境、iLogger管理器记录器){
if(env.IsDevelopment()){
app.usedeveloperceptionpage();
}
app.UseHttpsRedirection();
app.UseRouting();
app.UseAuthorization();
app.UseEndpoints(端点=>
{
endpoints.MapControllers();
endpoints.Select().Filter().OrderBy().Count().MaxTop(10);
MapODataRoute(“odata”,“odata”,GetEdmModel());
});
}
我正在添加这样的服务

services.AddOData();
我的模型就是这样设置的

private IEdmModel GetedModel()
{
var odataBuilder=新ODataConventionModelBuilder();
odataBuilder.EntitySet(“EcoBusinessSector”);
//odataBuilder.EntitySet(“EcoBusinessArea”);
odataBuilder.EntitySet(“天气预报”);
odataBuilder.EntitySet(“学生”);
odataBuilder.EntitySet(“EDCCenter1”);
返回odataBuilder.GetEdmModel();
}
这不管用。但是,当我将主键更改为
Id
时,它正好工作

使用系统;
使用System.Collections.Generic;
使用System.ComponentModel.DataAnnotations;
使用System.Linq;
使用System.Threading.Tasks;
名称空间CADERPSAAS.API
{
公立班学生
{
[关键]
公共int Id{get;set;}
公共字符串名称{get;set;}
}
}
真正的问题是,在我的模型中将StudentId改为Id为时已晚。是否有一种方法可以配置OData以使用我选择的另一个主键

谢谢

你说的“这不管用”是什么意思。什么不起作用?用
属性装饰属性就足够了。您能在这里共享您的示例服务的元数据吗?您可以通过浏览
/$metadata