2013-08-12 2 views
1

Просто быстрый вопрос по EF 5 с кодом. Как мне, во время выполнения, получить доступ к списку внешних ключей, которые существуют для определенного объекта, пожалуйста?Entity Framework 5: Получить список внешних ключей на объекте

Заранее спасибо

+0

Я бы подумал, что это будет связано с каким-то взглядом на конфигурацию отображения, загруженную в модель, но, кроме этого, не имеет понятия. Просто из любопытства, почему вы хотите это сделать? –

+0

На самом деле сущность не может иметь никаких внешних ключей, но в базе данных могут быть внешние ключи. Рассмотрим родительский объект с набором дочерних объектов, сопоставленный с 'WithMany()'. В этом случае будет создана таблица соединений, и дочерний объект не будет иметь никаких внешних ключей или свойств навигации. –

+0

Я пытаюсь проверить свою модель и хотел бы автоматически удалять созданные внешние ключи после каждого теста. Я работаю с существующей базой данных и хочу убедиться, что я добавлю смысл в те тесты, которые я создаю. – Kobojunkie

ответ

0

Вы можете перебирать коллекцию детской на материнской компании и сохранить идентификатор от каждого из дочерних организаций.

+0

Не могли бы вы подробнее объяснить, что вы разместили выше? – Kobojunkie

0

Я думаю, что правильный способ обойти это без хаков - использовать Metadata Workspace.

Несколько быстрых указателей:

  • Используйте ObjectContext свойства экземпляра производного DbContext для извлечения его обернутой ObjectContext экземпляра. Оттуда вы можете использовать свойство MetadataWorkspace для извлечения экземпляра MetadataWorkSpace.
  • Я бы посмотрел на одну из перегрузок метода GetType (например), чтобы получить EdmType для вашего объекта.
  • Как только у вас есть EdmType, это просто вопрос поиска свойств объекта, который он представляет, используя собственное свойство MetadataProperties. Вы можете отфильтровать каждый объект MetadataProperty в ReadOnlyMetadataCollection, посмотрев на их BuiltInTypeKind, значение которого должно быть BuiltInTypeKind.NavigationProperty.

Там могут быть и другие способы сделать это, например, каким-то образом извлечения коллекции EdmMember объектов для объекта, а затем, глядя на их CLR Type с помощью GetType. Один из возможных типов - NavigationProperty.

Отказ от ответственности: Не проверял это.

Смежные вопросы