Запрос OData без части составного первичного ключа в URL

1

Я пишу приложение, используя 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.

Теперь, поскольку я хочу получить весь QuizAnswerHistory для конкретного Student/Question, я не хочу указывать ModifiedDate в моем запросе OData.

Однако, поскольку ModifiedDate является первичным ключом, когда я отправляю запрос GET в /odata/QuizAnswerHistory(StudentId=1,QuestionId=2), я получаю ошибку: "Количество переданных первичных ключей должно соответствовать числу первичного ключа значения, определенные для объекта. "

Возможно ли сохранить ModifiedDate в качестве первичного ключа, но не требовать его в моих запросах?

Теги:
entity-framework
odata
ef-code-first

1 ответ

0
Лучший ответ

Существует два варианта решения проблемы:

  1. Отправьте запрос GET на этот URL: /odata/QuizAnswerHistory? $ Filter = StudentId eq 1 и QuestionId eq 2
  2. Использование функции OData Function, но вам нужно перейти с OData v3 на v4, где DateTime-тип заменяется DateTimeOffset. Для примера функции см. Https://aspnet.codeplex.com/SourceControl/latest#Samples/WebApi/OData/v4/ODataFunctionSample/
  • 0
    Я был так сосредоточен на своем составном ключе, что полностью забыл о параметре фильтра. Отлично, спасибо!

Ещё вопросы

Сообщество Overcoder
Наверх
Меню