Хобрук: Ваш путь к мастерству в программировании

Visual Studio 2017 PMC Add-Migrations не работает, ошибок нет

Я создал свой проект и смог добавить несколько миграций и соответствующим образом обновить базу данных с помощью PMC.

Сегодня; однако я вообще не могу добавлять миграции.

Вот что происходит:

PM> add-migration EventEntities
Microsoft.AspNetCore.DataProtection.KeyManagement.XmlKeyManager[0]
      User profile is available. Using 'C:\Users\MyUserAccount\AppData\Local\ASP.NET\DataProtection-Keys' as key repository and Windows DPAPI to encrypt keys at rest.
PM> 

Заметьте, ошибок нет. Он просто пишет «Профиль пользователя доступен ...» и после 30-секундного зависания ведет себя так, как будто ничего не произошло, и мои миграции не создаются ...

Почему миграция дополнений может внезапно перестать работать? Как я могу получить сообщение об ошибке?

Я пробовал несколько решений, в том числе:

  • $error[0].Exception.StackTrace но ничего не выводит.
  • update-package -reinstall при попытке переустановить все пакеты, но это не повлияло на указанную выше проблему.
  • Запуск Visual Studio 2017 в качестве администратора, но это не повлияло на указанную выше проблему.

Обновление: после комментирования некоторого кода в моем файле Startup.cs и повторного запуска команды добавления-миграции PMC я начал получать следующую ошибку:

System.InvalidOperationException: The convention invocations have reached the recursion limit. This is likely an issue in EF Core, please report it.

Похоже, это проблема, вызванная тем, как мои новые сущности были настроены в отношении связанных сущностей и внешних ключей. Я буду работать в обратном направлении, чтобы увидеть, смогу ли я найти конкретную проблему.



Ответы:


1

Я определил, что моя проблема была вызвана отношениями связанных объектов. Мое решение состояло в том, чтобы указать внешние ключи следующим образом:

public class Event
{
    public Guid Id { get; set; }
    public string Name { get; set; }

    [ForeignKey("EventId")]
    public virtual ICollection<EventHostAssociation> Hosts { get; set; }
}

public class EventHostAssociation
{
    public Guid EventId { get; set; }
    public string UserId { get; set; }

    public virtual Event Event { get; set; }
    public virtual ApplicationUser User { get; set; }
}

public class ApplicationUser : IdentityUser
{
    [ForeignKey("UserId")]
    public virtual ICollection<EventHostAssociation> EventHosts { get; set; }
}

И, наконец, в моем файле ApplicationDbContext.cs я указал свой составной ключ:

    protected override void OnModelCreating(ModelBuilder builder)
    {
        base.OnModelCreating(builder);

        builder.Entity<EventHostAssociation>().HasKey(c => new { c.EventId, c.UserId });
    }

Эта проблема также обсуждалась здесь: https://github.com/aspnet/EntityFrameworkCore/issues/9265

24.10.2017
  • Я не понимаю такое использование, то есть использование атрибута [ForeignKey] в свойстве навигации коллекции... имеет ли это какое-то отношение к тому факту, что ApplicationUser наследуется от IdentityUser? (т. е. не находит свойство [Key]?) 11.12.2018
  • Извините, что отвечаю через год, лол... Но для потомков есть несколько способов описать отношения в Entity Framework, и использование атрибута [ForeignKey] в свойстве навигации является одним из них. Этот метод и несколько других подробно описаны здесь: entityframeworktutorial.net/code-first/ 13.03.2019

  • 2

    Таблица EventHostAssociation должна иметь ссылку на внешний ключ события, вы должны добавить эту строку в таблицу EventHostAssociation

    [ForeignKey("EventAsso")
    public int EventId {get;set;}
    public virtual EventHostAssociation EventAsso{get;set:}
    
    04.09.2020
    Новые материалы

    Аргументы прогрессивного улучшения почти всегда упускают суть
    В наши дни в кругах веб-разработчиков много болтают о Progressive Enhancement — PE, но на самом деле почти все аргументы с обеих сторон упускают самую фундаментальную причину, по которой PE..

    Введение в Джанго Фреймворк
    Схема «работать умно, а не усердно» В этой и последующих статьях я познакомлю вас с тем, что такое фреймворк Django и как создать свое первое приложение с помощью простых и понятных шагов, а..

    Настольный ПК как «одно кольцо, чтобы править всеми» домашних компьютеров
    Вид после 9 месяцев использования С настольных компьютеров все началось, но в какой-то момент они стали «серверами», и мы все перешли на ноутбуки. В прошлом году я столкнулся с идеей настольных..

    Расширенные методы безопасности для VueJS: реализация аутентификации без пароля
    Руководство, которое поможет вам создавать безопасные приложения в долгосрочной перспективе Безопасность приложений часто упускается из виду в процессе разработки, потому что основная..

    стройный-i18следующий
    Представляем стройную оболочку для i18next. Эта библиотека, основанная на i18next, заключает экземпляр i18next в хранилище svelte и отслеживает события i18next, такие как languageChanged,..

    Обзор 20 основных и современных методов работы с массивами в JavaScript
    Вы знаете их всех? В этом коротком посте я покажу сводку методов, доступных в JavaScript для работы с массивами. Я надеюсь, что вы найдете это полезным! В конце поста вы найдете ссылку на..

    Да, но я чувствую необходимость указать, что это или не единственные два.
    Да, но я чувствую необходимость указать, что это или не единственные два. Обучение с подкреплением (в качестве примера) также является важным.