Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/338.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/svg/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# url中不包含部分复合主键的OData请求_C#_Entity Framework_Ef Code First_Odata - Fatal编程技术网

C# url中不包含部分复合主键的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

我首先使用EF6代码编写应用程序,并通过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
。它仅引用
学生
实体和
问题
实体

现在,因为我希望能够获得特定
学生/问题的整个
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。有关功能示例,请参阅:

  • 我是如此专注于我的复合键,以至于我完全忘记了过滤器选项。太好了,谢谢!