В базе данных уже есть объект с именем AspNetRoles. Пытаюсь добавить миграцию - PullRequest
1 голос
/ 06 августа 2020

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

Итак, у меня есть приложение Asp. Net MVC, ориентированное на Core 3.1, которое называется CompanyPortal.Web. есть библиотека классов под названием CompanyIdentity.DAL

Идентификация установлена ​​в dll.

Я расширил IdentityUser:

namespace CompanyIdentity.DAL.Data
{
    public class CompanyPortalUser: IdentityUser
    {
        public string CoreUserId { get; set; }
    }
}

Пока существует только одна миграция, исходный: 20200711193329_InitialDbCreation.cs

Я пытаюсь изменить тип данных CoreUserId и добавить пару полей:

namespace CompanyIdentity.DAL.Data
{
    public class CompanyPortalUser: IdentityUser
    {
        public int CoreUserId { get; set; }
        public string FirstName { get; set; }
        public string LastName { get; set; }
    }
}

Я получаю сообщение об ошибке, когда использую команду: Update- База данных

Я считаю, что это весь код, связанный с этим:

namespace CompanyIdentity.DAL.Data
{
    public class CompanyIdentityDbContext: IdentityDbContext<CompanyPortalUser>
    {
        public CompanyIdentityDbContext(DbContextOptions<CompanyIdentityDbContext> options): base(options)
        {

        }
    }
}
namespace CompanyIdentity.DAL.Migrations
{
    public partial class AddedToCompanyPortalUser : Migration
    {
        protected override void Up(MigrationBuilder migrationBuilder)
        {
            migrationBuilder.AlterColumn<int>(
                name: "CoreUserId",
                table: "AspNetUsers",
                nullable: false,
                oldClrType: typeof(string),
                oldType: "nvarchar(max)",
                oldNullable: true);

            migrationBuilder.AddColumn<string>(
                name: "FirstName",
                table: "AspNetUsers",
                nullable: true);

            migrationBuilder.AddColumn<string>(
                name: "LastName",
                table: "AspNetUsers",
                nullable: true);
        }

        protected override void Down(MigrationBuilder migrationBuilder)
        {
            migrationBuilder.DropColumn(
                name: "FirstName",
                table: "AspNetUsers");

            migrationBuilder.DropColumn(
                name: "LastName",
                table: "AspNetUsers");

            migrationBuilder.AlterColumn<string>(
                name: "CoreUserId",
                table: "AspNetUsers",
                type: "nvarchar(max)",
                nullable: true,
                oldClrType: typeof(int));
        }
    }
}

Вот соответствующие биты из Starup.cs ConfigureServices ():

            services.AddDbContext<CompanyIdentityDbContext>(config =>
            {
                config.UseSqlServer(_configuration.GetConnectionString("CompanyIdentityDb"));
            });

            services.AddIdentity<CompanyPortalUser, IdentityRole>()
                    .AddDefaultTokenProviders()
                    .AddEntityFrameworkStores<CompanyIdentityDbContext>();

Я не понимаю, почему он вообще пытается создавать таблицы? Разве он не должен просто попытаться выполнить мою последнюю миграцию?

У меня CompanyPortal.Web установлен как Startup Project. У меня также есть проект по умолчанию в консоли диспетчера пакетов, установленный на: CompanyIdentity.DAL

Еще один бит информации. Это решение содержит два веб-приложения: CompanyPortal.Web и CustomerPortal.Web. Оно также содержит две библиотеки классов, по одной для каждого уровня идентификации: CompanyIdentity.DAL и CustomerIdentity.DAL. Не уверен, что я должен указать что-то еще в базе данных обновления. команду из-за этого.

1 Ответ

1 голос
/ 06 августа 2020

Оказывается, в какой-то момент все решение было полностью переписано, а старая база данных сохранилась. Запись в таблице __EFMigrationsHistory, MigrationId не соответствует имени файла в папке Migrations проекта. Поскольку есть одна запись, начальная запись миграции, я удалил ее, а затем вставил запись с правильными MigrationId и ProductVersion.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...