какая разница между ODataController и используемым контроллером api [duplicate]

C99 N1256 стандартная черновик

http://www.open-std.org/JTC1/SC22/WG14/www/docs/n1256.pdf

6.5.3.4 Оператор sizeof :

3 При применении к операнду, который имеет структуру или тип объединения, результатом является общее количество байтов в таких объект, включая внутреннюю и конечную прокладку.

6.7.2.1 Спецификаторы структуры и объединения :

13 ... Там может быть неназванным дополнением внутри объекта структуры, но не в начале.

и:

15 В конце структуры может быть неназванное дополнение или объединение.

Новая функция члена C99 с гибким элементом массива (struct S {int is[];};) также может влиять на заполнение:

16 As в специальном случае последний элемент структуры с более чем одним именованным элементом может иметь неполный тип массива; это называется гибким элементом массива. В большинстве ситуаций гибкий элемент массива игнорируется. В частности, размер структуры выглядит так, как если бы гибкий элемент массива был пропущен, за исключением того, что он мог иметь более длинное дополнение, чем подразумевалось.

Приложение J Проблемы с переносимостью повторяет:

Следующие неуказаны: ...

  • Значение байтов заполнения при хранении значений в структурах или объединениях (6.2.6.1)

C ++ 11 Стандартная черновая версия N3337

http://www.open-std.org/jtc1/sc22/wg21/ docs / papers / 2012 / n3337.pdf

5.3.3 Размер :

2 При применении к классу результатом является количество байтов в объекте этого класса, включая любое дополнение, необходимое для размещения объектов этого типа в массиве.

9.2 Члены класса :

Указатель на объект структуры стандартного макета, соответствующим образом преобразованный с использованием reinterpret_cast, указывает на его начальный член (или если этот элемент является битовым полем, то t o единица, в которой он находится) и наоборот. [Примечание. Таким образом, в рамках объекта структуры стандартного макета может быть указано неназванное заполнение, но не в его начале, по мере необходимости, для достижения соответствующего выравнивания. - end note]

Я знаю достаточно C ++, чтобы понять примечание: -)

20
задан Pavel Voronin 14 August 2013 в 20:34
поделиться

2 ответа

Может ли кто-нибудь объяснить мне, когда я должен наследовать мою форму контроллера ODataController vs ApiController?

Вы хотели бы наследовать от ODataController, если хотите разоблачить конечную точку, которая придерживается к протоколу OData . Если вы хотите сделать что-то еще, например конечную точку REST, то наследуйте от ApiController.

Применение некоторых частей структуры OData WebAPI, но не других, вероятно, не очень хорошая идея. Это может быть в некоторых случаях, но, вероятно, не будет работать хорошо в других. Например, вы можете получить поддержку запросов, но конечная точка $ metadata не может быть сгенерирована (это просто спекуляция, фактические симптомы могут быть разными).

Похоже, вы уже используете EntityFramework. Я знаю, что есть несколько примеров, показывающих, как выставить это как конечную точку OData.

Если вы не хотите делать это по какой-либо причине, вы можете выполнить запрос самостоятельно. Это кратко описано в нескольких местах в этом учебнике , но суть заключается в том, чтобы добавить к вашему действию параметр типа ODataQueryOptions<T> и использовать методы для его фильтрации вашего набора результатов. Тем не менее, может быть больно генерировать хорошие запросы к базе данных для всех возможных запросов OData, поэтому вам следует избегать, если это возможно.

9
ответ дан Brian Reischl 20 August 2018 в 13:10
поделиться
  • 1
    Благодарю. Я изменил формулировку своего вопроса. Надеюсь, это станет более ясным. – Pavel Voronin 14 August 2013 в 20:29
  • 2
    Я думаю, что это может быть хорошей идеей, если вы отделите свои контроллеры в своем собственном каталоге. Например, создайте папку API и папку OData в папке Controllers. Одним из преимуществ использования OData является то, что вам не нужно создавать новый запрошенный linq-запрос для каждого запрошенного элемента; это очень полезно для запроса одного объекта (не объединенные сущности). Запрос url auto генерирует выражение linq для вас. Исключив необходимость добавления новых запросов linq, вы избегаете обслуживания кода и накладных расходов для своего проекта. – sksallaj 27 January 2014 в 02:48
  • 3
    Я бы использовал APIController для сложных объединенных связей сущностей и OData для простых отношений одного объекта. – sksallaj 27 January 2014 в 02:49
  • 4
    о, я .. и +1 за хороший ответ brian – sksallaj 27 January 2014 в 02:50
4
ответ дан Michael 20 August 2018 в 13:10
поделиться
Другие вопросы по тегам:

Похожие вопросы: