У меня есть три объекта:
ApplicationUser:
public class ApplicationUser : IdentityUser<Guid>
{
// more properties
public List<MeetingNotification> MeetingNotifications { get; set; }
}
MeetingNotifications:
public class MeetingNotification
{
public Guid Id { get; set; }
public Guid MeetingId { get; set; }
public Meeting Meeting { get; set; }
public Guid SummonedUserId { get; set; }
public ApplicationUser SummonedUser { get; set; }
}
Meetings:
public class Meeting
{
public Guid Id { get; set; }
// more properties
public Guid OrganizerId { get; set; }
public ApplicationUser Organizer { get; set; }
public List<MeetingNotification> Notifications { get; set; }
}
Отношения как таковые:
- Один
ApplicationUser
имеет много MeetingNotification
s - Один
MeetingNotification
имеет один ApplicationUser
и один Meeting
- Один
Meeting
имеет много MeetingNotification
s
Когда я пытаюсь update-database
, я получаю сообщение об ошибке
Введение ограничения FOREIGN KEY 'FK_MeetingNotifications_Meetings_MeetingId' в таблице 'MeetingNotifications 'может вызвать циклы или несколько каскадных путей. Укажите ON DELETE NO ACTION или ON UPDATE NO ACTION, или измените другие ограничения FOREIGN KEY.
Эта ошибка - мой заклятый враг, поскольку я изо всех сил пытаюсь понять, была ли ошибка ложью. Это в Meeting
или в MeetingNotification
. Или где-нибудь еще?
Я пробовал эти три определения:
modelBuilder.Entity<MeetingNotification>()
.HasOne(m => m.Meeting)
.WithMany(n => n.Notifications)
.HasForeignKey(fk => fk.Id).OnDelete(DeleteBehavior.NoAction);
modelBuilder.Entity<MeetingNotification>()
.HasOne(m => m.Meeting)
.WithMany(n => n.Notifications)
.HasForeignKey(fk => fk.MeetingId).OnDelete(DeleteBehavior.NoAction);
modelBuilder.Entity<Meeting>()
.HasMany(n => n.Notifications)
.WithOne(m => m.Meeting)
.HasForeignKey(fk => fk.MeetingId).OnDelete(DeleteBehavior.NoAction);
... но они, похоже, ничего не делают. Это одно и то же сообщение об ошибке каждый раз
Обновление
Наконец-то я нашел способ!
modelBuilder.Entity<MeetingNotification>()
.HasOne(m => m.Meeting)
.WithMany(n => n.Notifications)
.OnDelete(DeleteBehavior.Restrict);
... и ошибка исчезла ! Но я не совсем понимаю, почему, поэтому будет полезно любое хорошее объяснение!