Я без особого успеха искал ресурсы о том, как объявлять отношения внешнего ключа и другие ограничения, используя сначала код EF 4.1. В основном я создаю модель данных в коде и использую MVC3 для запроса этой модели. Все работает через MVC, и это здорово (слава Microsoft!), Но теперь я хочу, чтобы он НЕ работал, потому что мне нужны ограничения модели данных.
Например, у меня есть объект Order, который имеет множество свойств, которые являются внешними объектами (таблицами). Прямо сейчас я могу без проблем создать заказ, но без возможности добавления внешнего ключа или внешних объектов. MVC3 устанавливает это без проблем.
Я понимаю, что я мог бы просто добавить объекты в класс контроллера перед сохранением, но я бы хотел, чтобы вызов DbContext.SaveChanges () завершился ошибкой, если отношения ограничений не были соблюдены.
НОВАЯ ИНФОРМАЦИЯ
Поэтому, в частности, я хотел бы, чтобы возникло исключение, когда я пытаюсь сохранить объект Order без указания объекта клиента. Это не похоже на поведение, если я просто составляю объекты, как описано в большей части документации Code First EF.
Последний код:
public class Order
{
public int Id { get; set; }
[ForeignKey( "Parent" )]
public Patient Patient { get; set; }
[ForeignKey("CertificationPeriod")]
public CertificationPeriod CertificationPeriod { get; set; }
[ForeignKey("Agency")]
public Agency Agency { get; set; }
[ForeignKey("Diagnosis")]
public Diagnosis PrimaryDiagnosis { get; set; }
[ForeignKey("OrderApprovalStatus")]
public OrderApprovalStatus ApprovalStatus { get; set; }
[ForeignKey("User")]
public User User { get; set; }
[ForeignKey("User")]
public User Submitter { get; set; }
public DateTime ApprovalDate { get; set; }
public DateTime SubmittedDate { get; set; }
public Boolean IsDeprecated { get; set; }
}
Это ошибка, которую я получаю сейчас при доступе к представлению, сгенерированному VS для пациента:
СООБЩЕНИЕ ОБ ОШИБКЕ
Атрибут ForeignKeyAttribute для свойства "Пациент" типа "PhysicianPortal.Models.Order" недопустим. Имя внешнего ключа Parent не найдено в зависимом типе PhysicianPortal.Models.Order. Значение Name должно быть списком имен свойств внешнего ключа, разделенных запятыми.
С Уважением,
Гвидо