2009-12-28 4 views
4

Итак, когда вы привязываете коллекцию объектов Entity к компоненту сетки, сетка отображает эти поля в следующем порядке, в котором они находятся в таблице SQL, из которой они пришли. Это показывает, что порядковая позиция полей связана с их соответствующими свойствами объекта ... так или иначе.Последовательность столбцов и структура сущностей

Итак, вот вопрос: Как получить порядковое положение поля таблицы, отразив свойства Entity Framework Entity?

Позвольте мне рассказать вам, что я знаю и что я пробовал. По-видимому, каждое свойство поля данных в объекте EF украшено атрибутом System.Runtime.Serialization.DataMemberAttribute. У этого атрибута есть свойство Order. Однако я обнаружил, что это свойство не содержит того, что я ищу. Значение для всех свойств данных в сущности кажется равным -1. Какой бы порядок ни был, это не порядковая позиция.

С кем-нибудь это имело дело?

ответ

2

Атрибуты реляционных данных не имеют порядка и порядкового номера. Столбцы в таблице не имеют порядка, а не порядкового (физическая реализация). Позиции столбцов заданного результата соответствуют конкретным запросам на основе прогнозируемого списка запроса, и приложение всегда знает порядковый номер, потому что ему известен список проекций, который он запросил.

Если вы хотите отображать столбцы в определенном порядке в сетке, отобразите их в том порядке, в котором вы хотите. Если вы хотите получить порядковый номер столбца в физическом хранилище для специальных запросов, не известных во время разработки, то вы собираетесь взаимодействовать с физическим хранилищем напрямую с помощью определенного механизма хранения. Например, если хранилище является SQL Server, вы можете посмотреть в sys.columns.

+2

Это («Столбцы в таблице не имеют порядка или порядкового номера») истинно в теории реляционных, ложных почти для каждой СУБД СУБД. Большинство SQL DB имеют функцию заказа столбцов. –

+0

SQL Server 2012, наконец, имеет столбец «SEQUENCE», который поддерживает порядковый номер (на практике, если не теоретически). – Mrchief

+0

Это не ложь, потому что вы можете переупорядочить его по своему усмотрению. – TomTom

0

Я знаю, что прошло какое-то время с тех пор, как вы задали вопрос, но я думал, что я бы это представил. Недавно я создал универсальный класс для редактирования моих объектов EF и при этом потребовался для итерации свойств, связанных с данным типом. Я не знаю точно, что вы пытаетесь достичь, но вот то, что у меня есть:

  Dim Id as Integer = 1 
      pEditRecord = (From locs In BIPContext.AspNetUsers Where locs.Id = Id Select locs).FirstOrDefault() 

      Dim iProps = pEditRecord.GetType().GetProperties() 
      For z As Integer = 0 To iProps.Count - 1 
       Dim iColName = iProps(z).Name 
       Dim iVal = iProps(z).GetValue(pEditRecord) 
      Next 
+0

Да. Правильно. Теперь назад - он просит порядковый номер стола, а не порядковый номер свойства. – TomTom

0

Как я могу получить поле порядкового номера таблицы, отражая над свойствами Субъекта Framework субъекта?

Как я могу получить имя повара какой-нибудь пищи, глядя на еду?

Вы не можете.

Вы можете запросить метаданные EF - не класс, но это ничего не значит, поскольку метаданные могут иметь другой порядок, чем поле в базе данных.

Если вы хотите получить поле в базе данных, получите имя таблицы, затем запросите информацию INFORMATION_SCHEMA и получите оттуда порядковые номера поля (конечно, они есть), но все, что вы делаете с инфраструктурой сущностей, может иметь совершенно другой порядок, чем хранения в базе данных.