为什么我的 OData V4 标识符不适用于我的 ASP.NET 数据服务?
Why is my OData V4 Identifier not working on my ASP.NET dataservice?
使用整数键时,我在 ASP.NET 中使用我的 OData V4 服务时遇到问题。我没有使用 Entity Framework,因为我从 SOAP 服务获取数据。
这是我的数据class:
public class RecipeDto
{
public RecipeDto();
public RecipeDto(string name);
public RecipeDto(int ident);
public string Description { get; set; }
public int Ident { get; set; }
public string Name { get; set; }
public List<RecipeVersionDto> Versions { get; set; }
}
然后我使用 fluent API:
设置了我的密钥
var rtdto = builder.EntitySet<RecipeTemplateDto>("AgentConfigTemplates").EntityType
.HasKey(r => r.Ident)
.HasMany(r => r.Versions);
这是我的服务元数据:
<EntityType Name="RecipeTemplateDto">
<Key>
<PropertyRef Name="Ident"/>
</Key>
<Property Name="Ident" Type="Edm.Int32" Nullable="false"/>
<Property Name="Description" Type="Edm.String"/>
<Property Name="Name" Type="Edm.String"/>
<NavigationProperty Name="Versions" Type="Collection(Ifmdatalink.Linerecorder.Backend.PlugIn.dto.RecipeTemplateVersionDto)"/>
</EntityType>
现在我希望通过使用此查询获得我的实体集的第一个条目:
GET http://localhost:13917/my.svc/AgentConfigTemplates(1)
但我总能得到完整的列表。
为什么会这样,我怎样才能获得第一个条目?
我是否必须以某种方式扩展我的 odata 控制器?
如果我将密钥放在引号中,我会收到错误的请求响应。
答案既不在模型中,也不在流畅的 api 定义中。这是控制器的问题。 OData Controller需要实现两个get方法:
public async Task<IQueryable<AgentVersionDto>> Get()
public SingleResult<AgentDto> Get([FromODataUri] int key)
这涵盖了整个实体集和单个条目的获取。如果后者未实现,webapi 2 中的 odata 服务将始终 return 整个列表。
使用整数键时,我在 ASP.NET 中使用我的 OData V4 服务时遇到问题。我没有使用 Entity Framework,因为我从 SOAP 服务获取数据。
这是我的数据class:
public class RecipeDto
{
public RecipeDto();
public RecipeDto(string name);
public RecipeDto(int ident);
public string Description { get; set; }
public int Ident { get; set; }
public string Name { get; set; }
public List<RecipeVersionDto> Versions { get; set; }
}
然后我使用 fluent API:
设置了我的密钥var rtdto = builder.EntitySet<RecipeTemplateDto>("AgentConfigTemplates").EntityType
.HasKey(r => r.Ident)
.HasMany(r => r.Versions);
这是我的服务元数据:
<EntityType Name="RecipeTemplateDto">
<Key>
<PropertyRef Name="Ident"/>
</Key>
<Property Name="Ident" Type="Edm.Int32" Nullable="false"/>
<Property Name="Description" Type="Edm.String"/>
<Property Name="Name" Type="Edm.String"/>
<NavigationProperty Name="Versions" Type="Collection(Ifmdatalink.Linerecorder.Backend.PlugIn.dto.RecipeTemplateVersionDto)"/>
</EntityType>
现在我希望通过使用此查询获得我的实体集的第一个条目:
GET http://localhost:13917/my.svc/AgentConfigTemplates(1)
但我总能得到完整的列表。
为什么会这样,我怎样才能获得第一个条目?
我是否必须以某种方式扩展我的 odata 控制器?
如果我将密钥放在引号中,我会收到错误的请求响应。
答案既不在模型中,也不在流畅的 api 定义中。这是控制器的问题。 OData Controller需要实现两个get方法:
public async Task<IQueryable<AgentVersionDto>> Get()
public SingleResult<AgentDto> Get([FromODataUri] int key)
这涵盖了整个实体集和单个条目的获取。如果后者未实现,webapi 2 中的 odata 服务将始终 return 整个列表。