我正在 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, Action
1 wrapCloseInAction) at System.Data.SqlClient.TdsParser.ThrowExceptionAndWarning(TdsParserStateObject stateObj, Boolean callerHasConnectionLock, Boolean asyncClose) 注意:我删除了“过滤器:” [NormalizedName] IS NOT NULL"" 部分代码,但我仍然收到相同的错误
CreateIndex 方法中加粗的 NOT 关键字(帖子中的第一个代码片段)是罪魁祸首。现在,我可以理解我是否编写了该代码,但这是从添加迁移生成的代码。我不明白为什么这是错误的。