在url中没有组合主键部分的OData请求
本文关键字:键部 OData 请求 组合 url | 更新日期: 2023-09-27 18:04:02
我正在使用EF6 Code First编写应用程序,并通过OData端点公开我的实体。我有一个本质上的变化跟踪实体,它跟踪另一个实体之前的所有值;类似以下内容:
public class QuizAnswerHistory
{
[Key]
public int StudentId { get; set; }
[Key]
public int QuestionId { get; set; }
[Key]
public DateTime ModifiedDate { get; set; }
public string AnswerValue { get; set; }
}
我还有一个QuizAnswer
实体,它具有完全相同的属性,除了它的复合主键不包括ModifiedDate
。仅引用Student
实体和Question
实体。
现在,因为我希望能够获得特定Student/Question
的整个QuizAnswerHistory
实体,所以我不想在OData请求中指定ModifiedDate
。
然而,因为ModifiedDate
是一个主键,当我向/odata/QuizAnswerHistory(StudentId=1,QuestionId=2)
发送GET请求时,我得到了错误,"传递的主键值的数量必须与实体上定义的主键值的数量匹配。"
是否有可能保持ModifiedDate
为主键,但不需要它在我的请求?
有两个选项可以解决这个问题:
- 发送GET请求到这个URL:/odata/QuizAnswerHistory吗?$filter=StudentId eq 1 and QuestionId eq 2
- 使用OData Function特性,但需要从OData v3升级到v4,其中DateTime类型被替换为DateTimeOffset。有关功能示例,请参考:https://aspnet.codeplex.com/SourceControl/latest#Samples/WebApi/OData/v4/ODataFunctionSample/