C# url中不包含部分复合主键的OData请求
我首先使用EF6代码编写应用程序,并通过OData端点公开实体。我有一个本质上是变更跟踪实体,它跟踪另一个实体的所有以前的值;类似于以下内容:C# url中不包含部分复合主键的OData请求,c#,entity-framework,ef-code-first,odata,C#,Entity Framework,Ef Code First,Odata,我首先使用EF6代码编写应用程序,并通过OData端点公开实体。我有一个本质上是变更跟踪实体,它跟踪另一个实体的所有以前的值;类似于以下内容: public class QuizAnswerHistory { [Key] public int StudentId { get; set; } [Key] public int QuestionId { get; set; } [Key] public DateTime ModifiedDate { g
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
。它仅引用学生
实体和问题
实体
现在,因为我希望能够获得特定学生/问题的整个QuizAnswerHistory
实体,所以我不想在OData请求中指定ModifiedDate
但是,由于ModifiedDate
是一个主键,当我向/odata/QuizAnswerHistory(StudentId=1,QuestionId=2)
发送GET请求时,我得到一个错误,“传递的主键值数量必须与实体上定义的主键值数量匹配。”
是否可以将ModifiedDate
保留为主键,但在我的请求中不需要它?有两个选项可以解决此问题:
向此URL发送GET请求:
/odata/QuizAnswerHistory?$filter=学生ID等式1和问题ID等式2
使用OData函数特性,但您需要从ODataV3升级到v4,其中DateTime类型为替换为DateTimeOffset。有关功能示例,请参阅:
我是如此专注于我的复合键,以至于我完全忘记了过滤器选项。太好了,谢谢!