Чтение метаданных внешнего ключа программным путем с помощью Entity Framework 4

Кто-нибудь знает, как можно получить информацию о схеме из созданной edmx Entity Framework?

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

EG: Моя схема имеет 2 classа, User и Group. У меня есть номер «42», который, как я знаю, получен из свойства «GroupId» объекта «Пользователь», но на данный момент я не могу понять, как определить, что это свойство «GroupId» внешних ключей «Пользователь» объект «Группа» по свойству «GroupId».

Вы можете использовать следующий подход –

foreach (EntityType entity in ItemCollection.GetItems().OrderBy(e => e.Name)) foreach (var entityMember in entity.NavigationProperties) foreach (System.Data.Metadata.Edm.EdmProperty foreignKey in entityMember.GetDependentProperties()) { //... use foreignKey } 

Закончился поиск решения этого. Соответствующую информацию можно найти в свойстве RelationshipManager контекста. Вызвав GetAllRelatedEnds() а затем GetAllRelatedEnds() типа AssociationSet .

Элемент ElementType из набора ассоциаций содержит свойство IsForeignKey а также массив ReferentialConstraints который имеет свойства для каждого ограничения ToRole , ToProperty , FromRole и FromProperty соответственно, а RelationshipMultiplicity на ToRole / FromRole может использоваться для определения направления внешнего ключа отношения.

Принимая все эти данные и используя метод GetObjectByKey контекста, я смог программно пересекать отношения внешнего ключа, определенные для контекста, не имея связанного объекта.

  • Возможно ли по умолчанию использовать поле DateTime для GETDATE () с миграциями Entity Framework?
  • Entity Framework - добавить свойство навигации вручную
  • Как сделать Entity Framework Data Context Readonly
  • Entity Framework 4 / POCO - С чего начать?
  • Инициализация платформы Entity - SLOW - что я могу сделать, чтобы быстрее запустить ее?
  • Уже есть открытый DataReader, связанный с этой Командой, который должен быть закрыт первым
  • Является ли DbContext таким же, как DataContext?
  • Отображение типа CLR типа EDM неоднозначно с EF 6 и 5?
  • Как отключить сущность из контекста в Entity Framework?
  • Самый эффективный метод дерева привязки с использованием Entity Framework
  • String.Equals () не работает по назначению
  • Давайте будем гением компьютера.