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 ++, чтобы понять примечание: -)
Может ли кто-нибудь объяснить мне, когда я должен наследовать мою форму контроллера ODataController vs ApiController?
blockquote>Вы хотели бы наследовать от
ODataController
, если хотите разоблачить конечную точку, которая придерживается к протоколу OData . Если вы хотите сделать что-то еще, например конечную точку REST, то наследуйте отApiController
.Применение некоторых частей структуры OData WebAPI, но не других, вероятно, не очень хорошая идея. Это может быть в некоторых случаях, но, вероятно, не будет работать хорошо в других. Например, вы можете получить поддержку запросов, но конечная точка $ metadata не может быть сгенерирована (это просто спекуляция, фактические симптомы могут быть разными).
Похоже, вы уже используете EntityFramework. Я знаю, что есть несколько примеров, показывающих, как выставить это как конечную точку OData.
Если вы не хотите делать это по какой-либо причине, вы можете выполнить запрос самостоятельно. Это кратко описано в нескольких местах в этом учебнике , но суть заключается в том, чтобы добавить к вашему действию параметр типа
ODataQueryOptions<T>
и использовать методы для его фильтрации вашего набора результатов. Тем не менее, может быть больно генерировать хорошие запросы к базе данных для всех возможных запросов OData, поэтому вам следует избегать, если это возможно.
Это объясняет различия: http://blogs.msdn.com/b/alexj/archive/2012/08/15/odata-support-in-asp-net-web-api.aspx