Вот моя упрощенная модель:
public class Customer
{
public int ID { get; set; }
public int MailingAddressID { get; set; }
[ForeignKey("MailingAddressID")]
public Address MailingAddress { get; set; }
public virtual ICollection<Address> Addresses { get; set; }
}
public class Address
{
public int ID { get; set; }
public int CustomerID { get; set; }
[ForeignKey("CustomerID")]
public Customer Customer { get; set; }
}
Когда я пытаюсь создать базу данных, я получаю следующую ошибку:
Введение ограничения FOREIGN KEY 'Customer_MailingAddress' on table 'Клиенты могут вызывать циклы или несколько каскадных путей.Укажите ON DELETE NO ACTION или ON UPDATE NO ACTION, либо измените другие ограничения FOREIGN KEY.Не удалось создать ограничение.Смотрите предыдущие ошибки.
Я не понимаю, в чем проблема.Я понимаю, что Клиент с адресом не может быть удален, а также что Адрес, который является Почтовым адресом Клиента, также не может быть удален.
Это соответствует моему дизайну, потому что, если у Клиента есть один или несколько адресов, то это должен быть почтовый адрес, и этот адрес не может быть удален.
Так чего мне здесь не хватает?Спасибо!
Редактировать:
Забыл упомянуть, что я попытался добавить следующую строку в метод OnModelBuilding:
modelBuilder.Entity<Customer>().Property(x => x.MailingAddressID).IsOptional();
Это позволяет базе данныходнако при добавлении клиента я получаю следующую ошибку:
Оператор INSERT конфликтует с ограничением FOREIGN KEY "Customer_MailingAddress".Конфликт произошел в базе данных «DomainModel.SeasideHeightsEntities», таблице «dbo.Addresses», столбце «ID».Заявление было прекращено.
Все еще не знаю, как правильно смоделировать это.