Entity framework 具有标识的ASP.NET核心MVC初始迁移失败,标识表为ALTER列
创建具有单独身份验证的新ASP.NET Core MVC项目(Core 2.2)时,初始迁移失败,错误为“要更改列的标识属性,需要删除并重新创建列” 所遵循的过程如下:Entity framework 具有标识的ASP.NET核心MVC初始迁移失败,标识表为ALTER列,entity-framework,asp.net-core,entity-framework-core,asp.net-identity,Entity Framework,Asp.net Core,Entity Framework Core,Asp.net Identity,创建具有单独身份验证的新ASP.NET Core MVC项目(Core 2.2)时,初始迁移失败,错误为“要更改列的标识属性,需要删除并重新创建列” 所遵循的过程如下: 使用dotnet新建mvc-o-auth-Individual创建项目 修改连接字符串并更改为本地运行的SQlServer express 修改startup.cs以使用SQLServer而不是SQLite 使用dotnet ef数据库更新成功运行身份的初始迁移 为应用程序添加新模型 修改ApplicationDbContex
- 使用
dotnet新建mvc-o-auth-Individual创建项目
- 修改连接字符串并更改为本地运行的SQlServer express
- 修改startup.cs以使用SQLServer而不是SQLite
- 使用
dotnet ef数据库更新成功运行身份的初始迁移
- 为应用程序添加新模型
- 修改ApplicationDbContext以包含应用程序模型的新数据库集李>
- 创建新迁移`dotnet ef migration add
- 使用
dotnet ef数据库更新更新数据库
使用Microsoft.EntityFrameworkCore.Metadata;
使用Microsoft.EntityFrameworkCore.Migrations;
命名空间:monitor.Data.Migrations
{
公共部分类初始化模型:迁移
{
受保护的覆盖作废(MigrationBuilder MigrationBuilder)
{
migrationBuilder.DropIndex(
名称:“用户名索引”,
表:“AspNetUsers”);
migrationBuilder.DropIndex(
名称:“RoleNameIndex”,
表:“AspNetRoles”);
migrationBuilder.AlterColumn(
姓名:“Id”,
表:“AspNetUserClaims”,
可为空:false,
oldclType:typeof(int))
.Annotation(“SqlServer:ValueGenerationStrategy”,SqlServerValueGenerationStrategy.IdentityColumn);
migrationBuilder.AlterColumn(
姓名:“Id”,
表:“AspNetRoleClaims”,
可为空:false,
oldclType:typeof(int))
.Annotation(“SqlServer:ValueGenerationStrategy”,SqlServerValueGenerationStrategy.IdentityColumn);
migrationBuilder.CreateTable(
名称:“实体”,
列:表=>new
{
ID=table.Column(可空:false)
.Annotation(“SqlServer:ValueGenerationStrategy”,SqlServerValueGenerationStrategy.IdentityColumn),
EntityName=table.Column(可空:true),
main contact=table.Column(可空:true),
地址=table.Column(可空:true),
省=表.Column(可空:false),
电话号码=table.Column(可空:true)
},
约束:表=>
{
表.PrimaryKey(“PK_实体”,x=>x.ID);
});
migrationBuilder.CreateIndex(
名称:“用户名索引”,
表:“AspNetUsers”,
列:“NormalizedUserName”,
独一无二:没错,
筛选器:“[NormalizedUserName]不为空”);
migrationBuilder.CreateIndex(
名称:“RoleNameIndex”,
表:“AspNetRoles”,
列:“NormalizedName”,
独一无二:没错,
筛选器:“[NormalizedName]不为空”);
}
受保护的覆盖无效关闭(MigrationBuilder MigrationBuilder)
{
migrationBuilder.DropTable(
名称:“实体”);
migrationBuilder.DropIndex(
名称:“用户名索引”,
表:“AspNetUsers”);
migrationBuilder.DropIndex(
名称:“RoleNameIndex”,
表:“AspNetRoles”);
migrationBuilder.AlterColumn(
姓名:“Id”,
表:“AspNetUserClaims”,
可为空:false,
oldclType:typeof(int))
.OldAnnotation(“SqlServer:ValueGenerationStrategy”,SqlServerValueGenerationStrategy.IdentityColumn);
migrationBuilder.AlterColumn(
姓名:“Id”,
表:“AspNetRoleClaims”,
可为空:false,
oldclType:typeof(int))
.OldAnnotation(“SqlServer:ValueGenerationStrategy”,SqlServerValueGenerationStrategy.IdentityColumn);
migrationBuilder.CreateIndex(
名称:“用户名索引”,
表:“AspNetUsers”,
列:“NormalizedUserName”,
独特:正确);
migrationBuilder.CreateIndex(
名称:“RoleNameIndex”,
表:“AspNetRoles”,
列:“NormalizedName”,
独特:正确);
}
}
}
我希望新的迁移运行良好,不依赖于标识表
using Microsoft.EntityFrameworkCore.Metadata;
using Microsoft.EntityFrameworkCore.Migrations;
namespace CetaMonitor.Data.Migrations
{
public partial class InitialModel : Migration
{
protected override void Up(MigrationBuilder migrationBuilder)
{
migrationBuilder.DropIndex(
name: "UserNameIndex",
table: "AspNetUsers");
migrationBuilder.DropIndex(
name: "RoleNameIndex",
table: "AspNetRoles");
migrationBuilder.AlterColumn<int>(
name: "Id",
table: "AspNetUserClaims",
nullable: false,
oldClrType: typeof(int))
.Annotation("SqlServer:ValueGenerationStrategy", SqlServerValueGenerationStrategy.IdentityColumn);
migrationBuilder.AlterColumn<int>(
name: "Id",
table: "AspNetRoleClaims",
nullable: false,
oldClrType: typeof(int))
.Annotation("SqlServer:ValueGenerationStrategy", SqlServerValueGenerationStrategy.IdentityColumn);
migrationBuilder.CreateTable(
name: "Entity",
columns: table => new
{
ID = table.Column<int>(nullable: false)
.Annotation("SqlServer:ValueGenerationStrategy", SqlServerValueGenerationStrategy.IdentityColumn),
EntityName = table.Column<string>(nullable: true),
MainContact = table.Column<string>(nullable: true),
Address = table.Column<string>(nullable: true),
Province = table.Column<int>(nullable: false),
TelephoneNumbers = table.Column<string>(nullable: true)
},
constraints: table =>
{
table.PrimaryKey("PK_Entity", x => x.ID);
});
migrationBuilder.CreateIndex(
name: "UserNameIndex",
table: "AspNetUsers",
column: "NormalizedUserName",
unique: true,
filter: "[NormalizedUserName] IS NOT NULL");
migrationBuilder.CreateIndex(
name: "RoleNameIndex",
table: "AspNetRoles",
column: "NormalizedName",
unique: true,
filter: "[NormalizedName] IS NOT NULL");
}
protected override void Down(MigrationBuilder migrationBuilder)
{
migrationBuilder.DropTable(
name: "Entity");
migrationBuilder.DropIndex(
name: "UserNameIndex",
table: "AspNetUsers");
migrationBuilder.DropIndex(
name: "RoleNameIndex",
table: "AspNetRoles");
migrationBuilder.AlterColumn<int>(
name: "Id",
table: "AspNetUserClaims",
nullable: false,
oldClrType: typeof(int))
.OldAnnotation("SqlServer:ValueGenerationStrategy", SqlServerValueGenerationStrategy.IdentityColumn);
migrationBuilder.AlterColumn<int>(
name: "Id",
table: "AspNetRoleClaims",
nullable: false,
oldClrType: typeof(int))
.OldAnnotation("SqlServer:ValueGenerationStrategy", SqlServerValueGenerationStrategy.IdentityColumn);
migrationBuilder.CreateIndex(
name: "UserNameIndex",
table: "AspNetUsers",
column: "NormalizedUserName",
unique: true);
migrationBuilder.CreateIndex(
name: "RoleNameIndex",
table: "AspNetRoles",
column: "NormalizedName",
unique: true);
}
}
}