У меня есть следующая конфигурация. У меня есть Пользователь. У пользователя есть почтовый адрес и физический адрес (см. Ниже).Fluent api Каскад удалить по отношениям к одной таблице
public class UserProfile
{
public Guid UserProfileId {get; set;}
public Guid PostalAddressId {get;set;}
public virtual Address PostalAddress {get;set;}
public Guid PhysicalAddressId {get;set;}
public virtual Address PhysicalAddress {get;set;}
}
public class Address{
public Guid AddressId {get;set;}
public string LineOne {get;set;}
public string LineTwo {get;set;}
public string LineThree {get;set;}
}
Следующая моя свободно картирование
public UserProfileMapping()
{
ToTable("UserProfile");
HasKey(pk => pk.UserProfileId);
Property(pr => pr.UserProfileId).HasDatabaseGeneratedOption(DatabaseGeneratedOption.None);
HasRequired(a => a.PostalAddress).WithMany().HasForeignKey(fk => fk.PostalAddressId);
HasRequired(a => a.PhysicalAddress).WithMany().HasForeignKey(fk => fk.PhysicalAddressId);
}
public AddressMapping()
{
ToTable("Address");
HasKey(pk => pk.AddressId);
Property(pr => pr.AddressId).HasDatabaseGeneratedOption(DatabaseGeneratedOption.None);
}
Когда я пытаюсь запустить обновление-базы данных я получаю:
Вводя FOREIGN KEY ограничение 'FK_dbo.UserProfile_dbo.Address_PhysicalAddressId' на столе «UserProfile» может вызывать циклы или несколько каскадных путей. Укажите ON УДАЛИТЬ НЕТ ДЕЙСТВИЙ или НЕ ОБНОВИТЬ НЕТ ДЕЙСТВИЙ, или изменить другие ограничения FOREIGN KEY .
У меня не должно быть обратного отображения на объекте Address. Мне также нужно иметь возможность жестко удалить объект UserProfile, включая его дочерние адреса (из которых в таблице адресов будет только два).
Мой вопрос: Является ли это возможным? Если да, то что я делаю неправильно?
[EDIT] Объект Address также используется в таких объектах, как UserCompany и Customer.
Жаль, что я не дал достаточно информации. Объект Address может принадлежать больше, чем просто UserProfile. Объект компании также может иметь адрес, и у Клиента также может быть адрес. из моего понимания это не сработает, используя ваш предложенный ответ, потому что сопоставление один к одному. Я могу обновить свой вопрос, чтобы отразить это. –
Как вы можете удалить userProfile, включая его дочерние адреса, если адреса могут быть связаны с другим объектом? – Kinetic
Вы не хотите удаления каскада, если адрес не принадлежит UserProfile. – Kinetic