В Entity Framework 7, когда я пытаюсь применить миграцию, я получаю сообщение об ошибке
Введение ограничения FOREIGN KEY «FK_ChangeOrder_User_CreatedByID» в таблице «ChangeOrder» может вызвать циклы или множественные каскадные пути. Укажите ON DELETE NO ACTION или ON UPDATE NO ACTION или измените другие ограничения FOREIGN KEY.
Не удалось создать ограничение. См. предыдущие ошибки.
Я знаю, что в более старых версиях Entity Framework вы бы справились с этим, добавив
modelBuilder.Conventions.Remove<OneToManyCascadeDeleteConvention>();
в DbContext, но в EF7 modelBuilder
, похоже, нет .Conventions
, и Google возвращает только старые результаты EF 4, хотя результаты EF 6.
Как указать ограничение ON DELETE NO ACTION
в Entity Framework 7?
Изменить: ответ, предоставленный Олегом, по-видимому, сделает это для каждого внешнего ключа, но я хотел бы сделать это глобально, так как будет намного проще использовать одну строку кода, чтобы объявить это глобально, а затем указать код для каждого из них. сотни отношений, которые у меня будут в конечном итоге.
Редактировать 2: Код для Олега
public class ChangeOrder
{
[DatabaseGenerated(DatabaseGeneratedOption.Identity)]
public int ID { get; set; }
public Int16? ApprovedByID { get; set; }
public Byte ApprovalStatusID { get; set; }
public Int16 AssignedToID { get; set; }
public Int16 CreatedByID { get; set; }
public Byte CurrentStatusID { get; set; }
public DateTime? DateApproved { get; set; }
public DateTime? EndDate { get; set; }
public Byte ImpactID { get; set; }
public Byte PriorityID { get; set; }
public DateTime? StartDate { get; set; }
public Byte TypeID { get; set; }
[Required]
public string Name { get; set; }
[Required]
public string ReasonForChange { get; set; }
[ForeignKey("ApprovedByID")]
public User ApprovedBy { get; set; }
[ForeignKey("ApprovalStatusID")]
public ChangeApprovalStatus ApprovalStatus { get; set; }
[ForeignKey("AssignedToID")]
public User AssignedTo { get; set; }
[ForeignKey("CreatedByID")]
public User CreatedBy { get; set; }
[ForeignKey("ImpactID")]
public ChangeImpact Impact { get; set; }
[ForeignKey("PriorityID")]
public ChangePriority Priority { get; set; }
[ForeignKey("TypeID")]
public ChangeType ChangeType { get; set; }
[ForeignKey("CurrentStatusID")]
public ChangeStatus CurrentStatus { get; set; }
}
public class JobSightDBContext : DbContext
{
protected override void OnModelCreating(ModelBuilder modelbuilder)
{
base.OnModelCreating(modelbuilder);
}
DbSet<ChangeApprovalStatus> ChangeApprovalStatus { get; set; }
DbSet<ChangeImpact> ChangeImapct { get; set; }
DbSet<ChangeOrder> ChangeOrders { get; set; }
DbSet<ChangePriority> ChangePriorities { get; set; }
DbSet<ChangeStatus> ChangeStatus { get; set; }
DbSet<ChangeType> ChangeTypes { get; set; }
DbSet<User> Users { get; set; }
}