Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/asp.net-core/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Entity framework 具有标识的ASP.NET核心MVC初始迁移失败,标识表为ALTER列_Entity Framework_Asp.net Core_Entity Framework Core_Asp.net Identity - Fatal编程技术网

Entity framework 具有标识的ASP.NET核心MVC初始迁移失败,标识表为ALTER列

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

创建具有单独身份验证的新ASP.NET Core MVC项目(Core 2.2)时,初始迁移失败,错误为“要更改列的标识属性,需要删除并重新创建列”

所遵循的过程如下:

  • 使用
    dotnet新建mvc-o-auth-Individual创建项目
  • 修改连接字符串并更改为本地运行的SQlServer express
  • 修改startup.cs以使用SQLServer而不是SQLite
  • 使用
    dotnet ef数据库更新成功运行身份的初始迁移
  • 为应用程序添加新模型
  • 修改ApplicationDbContext以包含应用程序模型的新数据库集
  • 创建新迁移`dotnet ef migration add
  • 使用
    dotnet ef数据库更新更新数据库
此操作在以下情况下失败: “要更改列的标识属性,需要删除并重新创建该列”,与下面的代码相关

问题:
  • 如果没有更改,为什么EF需要更改预先存在的表的列
  • 如何解决这一问题
  • 假设:
  • 我使用相同的ApplicationDbContext,因为我希望标识表与应用程序数据位于同一数据库中
  • 建议使用指向同一数据库的2个DBContext吗
  • 使用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);
            }
        }
    }