Чтение метаданных внешнего ключа программным путем с помощью Entity Framework 4
Кто-нибудь знает, как можно получить информацию о схеме из созданной edmx Entity Framework?
В частности, я хочу, чтобы обойти внешний ключ для сущности, в которой у меня в настоящее время нет экземпляра, и получить отношения с внешним ключом, и я хочу сделать это с помощью отражения таким образом, который будет применяться в общем случае к любому class сущности без специального кода каждый раз.
EG: Моя схема имеет 2 classа, User и Group. У меня есть номер «42», который, как я знаю, получен из свойства «GroupId» объекта «Пользователь», но на данный момент я не могу понять, как определить, что это свойство «GroupId» внешних ключей «Пользователь» объект «Группа» по свойству «GroupId».
- Почему структура Entity Framework не может видеть информацию о столбце хранимой процедуры?
- Зачем повторно инициировать DbContext при использовании Entity Framework?
- Можно ли запретить EntityFramework 4 переписывать настроенные свойства?
- Ошибка API-интерфейса Asp.Net: тип «ObjectContent`1» не смог сериализовать тело ответа для типа контента «application / xml»; кодировка = UTF-8'
- Сравнение с регистром LINQ to Entities
- Код элемента Entity Framework Первый метод AddOrUpdate insert Дублирующие значения
- Использование свойств DateTime в Code-First Entity Framework и SQL Server
- Лучший способ запросить страницу данных и получить общее количество в инфраструктуре сущностей 4.1?
- Тайм-ауты структуры организации
- Использование Entity Framework с частной компактной установкой SQL Compact
- Представление ограничения FOREIGN KEY может вызвать циклы или несколько каскадных путей - почему?
- Как добавить проверку на мои classы POCO (шаблон)
- Преобразование Entity Framework / Linq EXpression из строки в int
Вы можете использовать следующий подход –
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
контекста, я смог программно пересекать отношения внешнего ключа, определенные для контекста, не имея связанного объекта.