2009-11-11 2 views
6

Возможно ли создать ассоциированные элементы b/t 2 неключевых полей в Entity Framework?Ассоциация Entity Framework с полями без ключа

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

Order (
    OrderId : int : PK 
    OrderNo : varchar 
) 

OrderDetails (
    DetailRecordId : int : PK 
    OrderNo : varchar 
) 

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

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

ответ

6

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

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

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

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

Смотрите мой Entity Framework Tips

Надеется, что это помогает.

+0

+1 Так значит ли это, что мне нужно вручную отредактировать файл .edmx? –

+0

К сожалению, да. –

+0

Еще раз спасибо. И последний вопрос. Если я отредактирую EDMX, как это будет работать, когда я хочу использовать мастер для обновления модели? Будут ли сохранены мои пользовательские изменения или когда я начну с маршрута «Редактировать EDMX», я вынужден внести все изменения вручную? –

1

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

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

+3

Вопрос заключается в том, хотя это будет разрешить его. скажем, я на 100% уверен, что этого не произойдет ... EF позволит мне наладить отношения, хотя это, очевидно, не хорошая практика? –

0

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

создать вид vOrder, который не будет включать в себя ПК и создать объект из него. Set PK в этой организации в OrderNo

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

Смежные вопросы