Как создать отношения между сущностями с существующей базой данных, которая не содержит внешних ключей - PullRequest
0 голосов
/ 02 июня 2018

Использование Entity Framework Core 2.0

Застрял в производственной базе данных компании, для которой определены первичные ключи для каждой таблицы, но не определены внешние ключи для каких-либо отношений.

Зависимые записи в базе данных имеют поля идентификаторовкоторые предназначены для связи с полями первичного ключа родительской записи, как вы обычно находите с отношением / ограничением внешнего ключа.Но все эти поля были созданы как INT NOT NULL и используют SQL по умолчанию «0».

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

Изначально я определил свои модели в EF с целыми числами и использовал свободную конфигурацию, чтобы указать "IsRequired».Это было сделано для того, чтобы я мог выполнить миграцию, чтобы создать тестовую базу данных для сравнения с производственной базой данных, чтобы убедиться, что мой код сначала был правильно закодирован.

Это может привести к проблеме при использовании «Включить» в моих запросах Linq, которое выполняет внутреннее объединение, которое приводит к удалению записей, содержащих 0, в полях идентификатора зависимой записи.

Единственный способ, с помощью которого я нашел эту работу, - смоделировать все поля идентификатора в зависимом объекте как целые числа, допускающие значение NULL, и удалить «IsRequired» из текущей конфигурации.

При использовании «Включить»он выполняет левое внешнее соединение, сохраняя все зависимые объекты.Это также означает, что любые свойства ссылки на включенных объектах устанавливаются в нуль вместо пустой строки.Эта часть, вероятно, может быть исправлена ​​довольно легко.

Недостатком является то, что если бы я хотел сейчас использовать миграцию для создания базы данных, все поля id в зависимых записях были бы созданы как NULL.

Есть ли кто-нибудь, кто сталкивался с такой ситуацией?У кого-нибудь есть какие-либо предложения, чтобы попробовать, кроме подхода, который я использую?

1 Ответ

0 голосов
/ 03 июня 2018

Я не имел дело с этим сценарием раньше, но мне интересно, можете ли вы решить его, определив свойство FK как Nullable, а затем в миграциях, после создания миграции, отредактируйте его, добавив свойство HasDefaultValue, чтобы убедиться, что оно0?(документ для этого метода миграции: https://docs.microsoft.com/en-us/ef/core/modeling/relational/default-values)

...