Ассоциация Entity Framework с полями без ключа - PullRequest
6 голосов
/ 11 ноября 2009

Можно ли создать ассоциированные b / t 2 неключевые поля в Entity Framework?

Пример: взять две таблицы в унаследованном приложении (т. Е. Ключи / структура не могут быть изменены)

Order (
    OrderId : int : PK
    OrderNo : varchar
)

OrderDetails (
    DetailRecordId : int : PK
    OrderNo : varchar
)

В Entity Framework я хочу создать связь b / t Order и OrderDetails с помощью поля OrderNo, которое не является первичным ключом ни для таблицы, ни для отношения FK в базе данных.

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

Ответы [ 3 ]

6 голосов
/ 12 ноября 2009

Entity Framework позволяет утверждать , что столбцы являются ключами и что ограничения FK существуют там, где их фактически нет в базе данных.

Это связано с тем, что SSDL (часть StorageModel в EDMX) может при необходимости использоваться вами, а ложь относительно базы данных.

EF будет взаимодействовать с базой данных, как будто ключи и внешние ключи действительно существуют.

Это должно работать, но применяются все обычные предупреждения о ссылочной целостности.

См. Мои Советы по Entity Framework

Надеюсь, это поможет.

1 голос
/ 11 ноября 2009

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

... при связывании данных из базы данных отношения всегда должны основываться на ключах. Ключи обеспечивают ссылочную целостность.

0 голосов
/ 31 октября 2013

Еще один обходной путь:

создать представление vOrder, в которое не будет входить PK, и создать Entity из него. Установите PK в этом объекте в OrderNo

Теперь вы сможете создавать ассоциации

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...