Вот моя упрощенная модель:
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» в таблице «Customers» может вызвать циклы или несколько каскадных путей. Укажите 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». Заявление было прекращено.
Все еще в недоумении, как правильно смоделировать это.