Все содержащие внешние ключи должны быть удалены или переопределены, прежде чем свойство может быть удалено — Ядро EF

#c# #asp.net #entity-framework #entity-framework-core #ef-code-first

#c# #asp.net #entity-framework #entity-framework-core #ef-code-first

Вопрос:

Я получаю указанную выше ошибку при попытке добавить миграцию после добавления внешнего ключа с помощью Entity Framework core. Я добавляю FK в

 public class ApplicantDetail
    {
        [Key]
        public int Id { get; set; }
        [ForeignKey("GrantProgramFK")]
        public GrantProgram GrantProgramId { get; set; }
 --------
   }
 

Этот FK привязан к классу

 public class GrantProgram
    {
        [Key]
        public int Id { get; set; }
   -----
    }
 

Любая помощь приветствуется. Я попытался удалить объект и снова запустить миграцию, но не удалось.

Полная ошибка:

Свойство ‘GrantProgramId’ не может быть удалено из объекта типа ‘EFDataAccessLibrary.Модели.ApplicantDetail’ потому что он используется во внешнем ключе {‘GrantProgramId’} в ‘EFDataAccessLibrary.Модели.ApplicantDetail’. Все содержащие внешние ключи должны быть удалены или переопределены, прежде чем свойство может быть удалено

Я нашел страницу, нажмите здесь, но что это значит? как это решить.

Ответ №1:

У меня была та же проблема. Я решил это, удалив «id» во внешнем ключе:

 public class ApplicantDetail
    {
        [Key]
        public int Id { get; set; }
        [ForeignKey("GrantProgramFK")]
        public GrantProgram GrantProgram { get; set; }
 --------
   }
 

Я до сих пор не знаю, почему. Если кто-нибудь может объяснить или дать решение оставить в нем «id», не стесняйтесь сообщить нам.

Комментарии:

1. Спасибо за ответ.. не знаю причины, но ошибка все равно появляется.

2. Это тоже решило для меня, любопытно, могу ли я каким-то образом сохранить конечный идентификатор?

Ответ №2:

Поскольку entityframework автоматически использует любой идентификатор, заканчивающийся на ‘ID или Id или id’, убедитесь, что никакое другое имя свойства не заканчивается на ‘ID или Id или id’

Ответ №3:

Вы должны исправить свои классы перед миграцией:

 public class ApplicantDetail
    {
        [Key]
        public int Id { get; set; }
         public int? GrantProgramId { get; set; }
        [ForeignKey("GrantProgramId")]
        [InverseProperty("ApplicantDetails")]
        public GrantProgram GrantProgram{ get; set; }
 --------
   }

public class GrantProgram
    {
        [Key]
        public int Id { get; set; }
       [InverseProperty(nameof(ApplicantDetail.GrantProram))]
        public virtual ICollection<ApplicantDetail> ApplicantDetails{ get; set; }
   -----
    }
 

Комментарии:

1. Спасибо за ответ. Но ошибка все еще отображается.

2. Ошибка гласит: «Все содержащие внешние ключи должны быть удалены или переопределены, прежде чем свойство может быть удалено». Но я ничего не пытаюсь удалить. что означает EF под этим.

3. @BGT вы получили какое-либо решение для этого?

Ответ №4:

Я бы рекомендовал удалить предыдущий файл миграции в решении, это работает для меня

Ответ №5:

Я получал ту же ошибку, в моем случае все, что я сделал, это отменил изменения в файле AppDbContextModelSnapshot (вы также можете удалить файл), который создается в папке migrations .

Оказывается, я допустил ошибку перед выполнением миграции, после чего был создан снимок модели моего AppDbContext. После исправления ошибки я снова попробовал миграцию, но AppDbContextModelSnapshot уже был изменен, EF не позволял переопределять с помощью того же ключа той же модели (в данном случае GrantProgramFK из GrantProgram model). Поэтому просто отмените изменения в вашем файле AppDbContextModelSnapshot и выполните миграцию снова.