#.net #asp.net-identity
Вопрос:
У меня мигрень миграции ядра ef со строковым типом данных.
Я хочу изменить строку на int для упрощения, но я не хочу потерять все миграции. он будет работать нормально, если я удалю все миграции
Когда я обновляю базу данных. это сообщение показало, что
System.InvalidOperationException
HResult=0x80131509
Message=To change the IDENTITY property of a column, the column needs to be dropped and recreated.
Source=Microsoft.EntityFrameworkCore.SqlServer
StackTrace:
at Microsoft.EntityFrameworkCore.Migrations.SqlServerMigrationsSqlGenerator.Generate(AlterColumnOperation operation, IModel model, MigrationCommandListBuilder builder)
at Microsoft.EntityFrameworkCore.Migrations.MigrationsSqlGenerator.<>c.<.cctor>b__83_4(MigrationsSqlGenerator g, MigrationOperation o, IModel m, MigrationCommandListBuilder b)
at Microsoft.EntityFrameworkCore.Migrations.MigrationsSqlGenerator.Generate(MigrationOperation operation, IModel model, MigrationCommandListBuilder builder)
at Microsoft.EntityFrameworkCore.Migrations.SqlServerMigrationsSqlGenerator.Generate(MigrationOperation operation, IModel model, MigrationCommandListBuilder builder)
at Microsoft.EntityFrameworkCore.Migrations.MigrationsSqlGenerator.Generate(IReadOnlyList`1 operations, IModel model, MigrationsSqlGenerationOptions options)
at Microsoft.EntityFrameworkCore.Migrations.SqlServerMigrationsSqlGenerator.Generate(IReadOnlyList`1 operations, IModel model, MigrationsSqlGenerationOptions options)
at Microsoft.EntityFrameworkCore.Migrations.Internal.Migrator.GenerateUpSql(Migration migration, MigrationsSqlGenerationOptions options)
at Microsoft.EntityFrameworkCore.Migrations.Internal.Migrator.<>c__DisplayClass16_2.<GetMigrationCommandLists>b__2()
at Microsoft.EntityFrameworkCore.Migrations.Internal.Migrator.Migrate(String targetMigration)
at Microsoft.EntityFrameworkCore.RelationalDatabaseFacadeExtensions.Migrate(DatabaseFacade databaseFacade)
at API.Extensions.DatabaseServiceExtensions.AddMSSQL[T](IServiceCollection services, String connectionString) in C:UsersChhin SrasDesktopCodingCMSAPIExtensionsDatabaseServiceExtensions.cs:line 54
at API.Extensions.DatabaseServiceExtensions.AddDatabaseContext[T](IServiceCollection services) in C:UsersChhin SrasDesktopCodingCMSAPIExtensionsDatabaseServiceExtensions.cs:line 33
at API.Extensions.ApplicationServiceExtensions.AddApplicationServices(IServiceCollection services, IConfiguration config) in C:UsersChhin SrasDesktopCodingCMSAPIExtensionsApplicationServiceExtensions.cs:line 30
at API.Startup.ConfigureServices(IServiceCollection services) in C:UsersChhin SrasDesktopCodingCMSAPIStartup.cs:line 30
at System.RuntimeMethodHandle.InvokeMethod(Object target, Object[] arguments, Signature sig, Boolean constructor, Boolean wrapExceptions)
at System.Reflection.RuntimeMethodInfo.Invoke(Object obj, BindingFlags invokeAttr, Binder binder, Object[] parameters, CultureInfo culture)
at Microsoft.AspNetCore.Hosting.ConfigureServicesBuilder.InvokeCore(Object instance, IServiceCollection services)
at Microsoft.AspNetCore.Hosting.ConfigureServicesBuilder.<>c__DisplayClass9_0.<Invoke>g__Startup|0(IServiceCollection serviceCollection)
at Microsoft.AspNetCore.Hosting.ConfigureServicesBuilder.Invoke(Object instance, IServiceCollection services)
at Microsoft.AspNetCore.Hosting.ConfigureServicesBuilder.<>c__DisplayClass8_0.<Build>b__0(IServiceCollection services)
at Microsoft.AspNetCore.Hosting.GenericWebHostBuilder.UseStartup(Type startupType, HostBuilderContext context, IServiceCollection services, Object instance)
at Microsoft.AspNetCore.Hosting.GenericWebHostBuilder.<>c__DisplayClass13_0.<UseStartup>b__0(HostBuilderContext context, IServiceCollection services)
at Microsoft.Extensions.Hosting.HostBuilder.CreateServiceProvider()
at Microsoft.Extensions.Hosting.HostBuilder.Build()
at API.Program.Main(String[] args) in C:UsersChhin SrasDesktopCodingCMSAPIProgram.cs:line 16
Я думаю, что-то вроде этого должно сработать. нам нужно удалить PK и добавить его снова вручную в сгенерированный файл миграции. но это было бы много работы и не идеальное решение.
migrationBuilder.DropPrimaryKey("PK_Duck", "Duck");
migrationBuilder.AlterColumn<string>(
name: "Id",
table: "Duck",
nullable: false,
oldClrType: typeof(Guid));
migrationBuilder.AddPrimaryKey("PK_Duck", "Duck", "Id");