Ответ 1
EF еще не поддерживает отношения, где главный ключ не является первичным ключом, а некоторым другим столбцом с уникальным ключевым ограничением. Это в списке запросов функций, но ни реализовано, ни дорожная карта для следующей версии (EF 6). Если он вообще будет реализован (возможно, в EF 7), ожидайте ждать год или больше, пока он не будет готов к производству.
В вашей конкретной модели EF вообще не распознает отношения между Form
и Patient
, потому что Patient.PatientID
отмечен как [Key]
, а не Patient.PatientGUID
, а EF рассматривает Form.PatientGUID
как обычный скаляр свойство, а не как FK до Patient
.
В теории вы могли бы подделать Patient.PatientGUID
как свойство [Key]
в модели, хотя это не первичный ключ в базе данных, если вы не создаете модель из базы данных или базы данных из первой модели кода, то есть, если вы вручную сопоставляете модель и (существующую) базу данных. Но я не уверен, что это не вызовет тонких проблем где-либо еще.
Альтернативой является написать инструкцию оператора join
в LINQ, если вы хотите извлечь Patients
и связанный Forms
. Затем вы можете объединить два объекта, используя произвольные свойства, а не только ключевые свойства. Это, на мой взгляд, более чистый и менее "хитрый" подход. Однако недостатком является то, что у вас не будет свойств навигации - ссылок или коллекций - между Patient
и Form
, и вы не можете использовать такие функции, как высокая загрузка (Include
), ленивая загрузка или удобный "синтаксис точечного пути" "(например, Form.Patient.SomePatientProperty
и т.д.) в ваших запросах LINQ.