Мы разрабатываем веб-приложение, используя ASP.NET MVC Core и EntityFramework Core для доступа к данным. Версия ядра .net - 2.2. Теперь мы пытаемся использовать MemoryOptimizedTables в SQL Server 2016 для наших существующих таблиц.
Я добавил следующую строку в методе OnModelCreating
modelBuilder.Entity<MailLog>().ForSqlServerIsMemoryOptimized();
затем я выполнил Add-Migration
это привело к файлу миграции ниже.
public partial class DataModel_v0711 : Migration
{
protected override void Up(MigrationBuilder migrationBuilder)
{
migrationBuilder.DropPrimaryKey(
name: "PK_Core_MailLogs",
table: "Core_MailLogs");
migrationBuilder.AlterDatabase()
.Annotation("SqlServer:MemoryOptimized", true);
migrationBuilder.AlterTable(
name: "Core_MailLogs")
.Annotation("SqlServer:MemoryOptimized", true);
migrationBuilder.AddPrimaryKey(
name: "PK_Core_MailLogs",
table: "Core_MailLogs",
column: "Id")
.Annotation("SqlServer:Clustered", false);
}
protected override void Down(MigrationBuilder migrationBuilder)
{
migrationBuilder.DropPrimaryKey(
name: "PK_Core_MailLogs",
table: "Core_MailLogs");
migrationBuilder.AlterDatabase()
.OldAnnotation("SqlServer:MemoryOptimized", true);
migrationBuilder.AlterTable(
name: "Core_MailLogs")
.OldAnnotation("SqlServer:MemoryOptimized", true);
migrationBuilder.AddPrimaryKey(
name: "PK_Core_MailLogs",
table: "Core_MailLogs",
column: "Id");
}
}
И я выполнил команду Update-Database. Я пытался с пустой базой данных.
Я пытаюсь взять скрипт миграции с помощью следующей команды.
dotnet ef migrations script --idempotent -o c:\test\migrate2_1.sql --project EntityFrameworkCore.csproj --startup-project Web.Mvc.csproj
Каждый раз, когда я получаю следующую ошибку.
System.InvalidOperationException: To set memory-optimized on a table on or off the table needs to be dropped and recreated.
at Microsoft.EntityFrameworkCore.Migrations.SqlServerMigrationsSqlGenerator.Generate(AlterTableOperation operation, IModel model, MigrationCommandListBuilder builder)
at Microsoft.EntityFrameworkCore.Migrations.MigrationsSqlGenerator.Generate(MigrationOperation operation, IModel model, MigrationCommandListBuilder builder)
at Microsoft.EntityFrameworkCore.Migrations.MigrationsSqlGenerator.Generate(IReadOnlyList`1 operations, IModel model)
at Microsoft.EntityFrameworkCore.Migrations.SqlServerMigrationsSqlGenerator.Generate(IReadOnlyList`1 operations, IModel model)
at Microsoft.EntityFrameworkCore.Migrations.Internal.Migrator.GenerateUpSql(Migration migration)
at Microsoft.EntityFrameworkCore.Migrations.Internal.Migrator.GenerateScript(String fromMigration, String toMigration, Boolean idempotent)
at Microsoft.EntityFrameworkCore.Design.Internal.MigrationsOperations.ScriptMigration(String fromMigration, String toMigration, Boolean idempotent, String contextType)
at Microsoft.EntityFrameworkCore.Design.OperationExecutor.ScriptMigration.c__DisplayClass0_1.b__0()
at Microsoft.EntityFrameworkCore.Design.OperationExecutor.OperationBase.c__DisplayClass3_0`1.b__0()
at Microsoft.EntityFrameworkCore.Design.OperationExecutor.OperationBase.Execute(Action action)
To set memory-optimized on a table on or off the table needs to be dropped and recreated.
Спасибо.