Entity Framework: определение сторон отношения внешнего ключа

#c# #entity-framework #foreign-keys

#c# #entity-framework #внешние ключи

Вопрос:

Есть ли способ определить, какой класс является ,,родительским», а какой является ,,дочерним» в отношении FK? Я не могу придумать способ надежного выполнения этого с помощью отражения, и я не имею ни малейшего представления, как это сделать с метаданными без синтаксического анализа строк. Я ищу что-то, что возвращало бы тип объекта «,,Parent».

Ответ №1:

API-интерфейс отображения Entity Framework является одним из способов сделать это. Я думаю, что технически возможно сделать то, что вам нужно, непосредственно с EF, но код — это кошмар. Я помню, что просто пытался найти первичные ключи непосредственно в EF, и это было запутанно. Эта библиотека сделает вашу жизнь намного проще.

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

Комментарии:

1. API полезен и прост в использовании. Но есть небольшая проблема: он обнаруживает только поля, которые отображаются из базы. Он не может видеть поля ICollection, добавленные к классам EF. Которые необходимы для обнаружения отношений fk.

2. Да, это ограничение. В качестве обходного пути вы могли бы использовать linq для запроса всех объектов, которые имеют свойство указанного объекта как FK. Тогда фактически у вас есть дочерние таблицы, связанные с этим объектом. .Db().Where(e => e.Fks.Any(f => f.FkTargetColumn.EntityMap == KeyEntity)) но это взлом