Как сначала создать отношение 1-к-1 в коде EF, используя таблицу карт / ссылок с быстрой конфигурацией - PullRequest
1 голос
/ 19 января 2012

У меня есть ситуация, когда я хотел бы создать отношение «один к одному» в Entity Framework (4.2) с использованием API-интерфейса для быстрой конфигурации кода, но для этого мне нужно использовать таблицу ссылок / карт.

Вот схема расположения моей таблицы.

1-to-1 relationship with link table

Это то, что я после ...

HasOptional(x => x.FieldPerson)
    .WithOptionalPrincipal()
    .Map(map =>
             {
                 map.ToTable("user_account__field_person");
                 map.MapLeftKey("user_account_id");
                 map.MapRightKey("field_person_id");
             });

... но, похоже, нет способа сделать это.

Альтернатива состоит в том, чтобы создать мои 3 сущности и управлять ими самостоятельно, используя соединения, где это уместно.

Возможно ли это или это сценарий, который EF Fluent API не обрабатывает?

1 Ответ

1 голос
/ 23 января 2012

Я собираюсь снова ответить на свой вопрос!

Я не думаю, что код EF в первую очередь имеет дело с этой ситуацией, потому что вся концепция таблицы ссылок / карт предполагает отношение «многие ко многим»..

В моем конкретном случае это ситуация с базой данных, и мне «приходится» иметь дело с этими таблицами, поскольку я не могу изменить базу данных на этом этапе.

То, что я сделал, этосначала используйте конфигурацию кода «многие ко многим» ...

HasMany(t=>t.FieldPersons)
    .WithMany(t=>t.UserAccounts)
    .Map(map =>
             {
                 map.ToTable("user_account__field_person");
                 map.MapLeftKey("user_account_id");
                 map.MapRightKey("field_person_id");
             });

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

...