0

我正在 Asp.Net Core 2.1 Web 应用程序中迁移代码优先域(初始创建)。

add-migration 命令创建了以下代码(为简洁起见,删除了非错误部分)

migrationBuilder.CreateIndex(
        name: "RoleNameIndex",
        schema: "BatlCtx",
        table: "AspNetRoles",
        column: "NormalizedName",
        unique: true,
        filter: "[NormalizedName] IS **NOT** NULL");

migrationBuilder.CreateIndex(
        name: "UserNameIndex",
        schema: "BatlCtx",
        table: "AspNetUsers",
        column: "NormalizedUserName",
        unique: true,
        filter: "[NormalizedUserName] IS **NOT** NULL");

这是表创建迁移的代码

migrationBuilder.CreateTable(
        name: "AspNetUsers",
        schema: "BatlCtx",
        columns: table => new
        {
            Id = table.Column<string>(nullable: false),
            UserName = table.Column<string>(maxLength: 256, nullable: true),
            NormalizedUserName = table.Column<string>(maxLength: 256, nullable: true),
            Email = table.Column<string>(maxLength: 256, nullable: true),
            NormalizedEmail = table.Column<string>(maxLength: 256, nullable: true),
            EmailConfirmed = table.Column<bool>(nullable: false),
            PasswordHash = table.Column<string>(nullable: true),
            SecurityStamp = table.Column<string>(nullable: true),
            ConcurrencyStamp = table.Column<string>(nullable: true),
            PhoneNumber = table.Column<string>(nullable: true),
            PhoneNumberConfirmed = table.Column<bool>(nullable: false),
            TwoFactorEnabled = table.Column<bool>(nullable: false),
            LockoutEnd = table.Column<DateTimeOffset>(nullable: true),
            LockoutEnabled = table.Column<bool>(nullable: false),
            AccessFailedCount = table.Column<int>(nullable: false),
            FirstName = table.Column<string>(maxLength: 50, nullable: false),
            LastName = table.Column<string>(maxLength: 80, nullable: false),
            Gender = table.Column<int>(nullable: false),
            MobilePhone = table.Column<string>(maxLength: 24, nullable: false),
            DateOfBirth = table.Column<DateTime>(nullable: false),
            UserPicture = table.Column<byte[]>(nullable: true),
            TimesLoggedIn = table.Column<int>(nullable: false)
            },
        constraints: table =>
        {
            table.PrimaryKey("PK_AspNetUsers", x => x.Id);
        });

第一次尝试更新数据库时,出现此错误

System.Data.SqlClient.SqlException (0x80131904):关键字“NOT”附近的语法不正确。在 System.Data.SqlClient.SqlConnection.OnError(SqlException exception, Boolean breakConnection, Action 1 wrapCloseInAction) at System.Data.SqlClient.SqlInternalConnection.OnError(SqlException exception, Boolean breakConnection, Action1 wrapCloseInAction) at System.Data.SqlClient.TdsParser.ThrowExceptionAndWarning(TdsParserStateObject stateObj, Boolean callerHasConnectionLock, Boolean asyncClose) 注意:我删除了“过滤器:” [NormalizedName] IS NOT NULL"" 部分代码,但我仍然收到相同的错误

CreateIndex 方法中加粗的 NOT 关键字(帖子中的第一个代码片段)是罪魁祸首。现在,我可以理解我是否编写了该代码,但这是从添加迁移生成的代码。我不明白为什么这是错误的。

4

1 回答 1

0

请通过这个帖子

您可以删除过滤器并运行更新数据库。如下所示:

migrationBuilder.CreateIndex(
    name: "RoleNameIndex",
    schema: "BatlCtx",
    table: "AspNetRoles",
    column: "NormalizedName",
    unique: true);
于 2018-11-28T14:21:15.130 回答