Если у вас есть класс Order
, добавьте свойство, которое ссылается на другой класс в вашей модели, например, Customer
должно быть достаточно, чтобы EF узнал, что там есть связь:
public class Order
{
public int ID { get; set; }
// Some other properties
// Foreign key to customer
public virtual Customer Customer { get; set; }
}
Вы всегда можете установить отношение FK
явно:
public class Order
{
public int ID { get; set; }
// Some other properties
// Foreign key to customer
[ForeignKey("Customer")]
public string CustomerID { get; set; }
public virtual Customer Customer { get; set; }
}
Конструктор ForeignKeyAttribute
принимает строку в качестве параметра: если вы помещаете ее в свойство внешнего ключа, оно представляет имя связанного свойства навигации,Если вы поместите его в свойство навигации, оно будет представлять имя связанного внешнего ключа.
Что это означает, если вы поместите ForeignKeyAttribute
в свойство Customer
, атрибут примет CustomerID
в конструкторе:
public string CustomerID { get; set; }
[ForeignKey("CustomerID")]
public virtual Customer Customer { get; set; }
РЕДАКТИРОВАТЬ на основе Последний код Вы получаете эту ошибку из-за этой строки:
[ForeignKey("Parent")]
public Patient Patient { get; set; }
EF будет искать свойство с именем Parent
, чтобы использовать его в качестве принудительного применения внешнего ключа.Вы можете сделать 2 вещи:
1) Удалите ForeignKeyAttribute
и замените его на RequiredAttribute
, чтобы пометить отношение как необходимое:
[Required]
public virtual Patient Patient { get; set; }
Украшение свойства с помощью RequiredAttribute
также имеет приятный побочный эффект: отношение в базе данных создается с помощью ON DELETE CASCADE
.
Я бы также рекомендовал сделать свойство virtual
для включения отложенной загрузки.
2) Создатьсвойство с именем Parent
, которое будет служить внешним ключом.В этом случае, вероятно, имеет смысл назвать его, например, ParentID
(вам также необходимо изменить имя в ForeignKeyAttribute
):
public int ParentID { get; set; }
В моем случае в этом случае, хотялучше работать наоборот:
[ForeignKey("Patient")]
public int ParentID { get; set; }
public virtual Patient Patient { get; set; }