#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 и выполните миграцию снова.