问题很明确。这是我在 dbContext
类中的 OnModelCreating
方法:
modelBuilder.Entity<States>(entity =>
{
entity.ToTable("States");
modelBuilder.Entity<States>()
.HasIndex(p => new { p.State })
.HasFilter("[State] IS NOT NULL")
.HasFilter("[Code] IS NOT NULL")
.IncludeProperties(p => new
{
p.Code
})
.IsUnique();
我也尝试了.IsUnique(true)
,但它没有起作用。
下面是生成的迁移代码:
protected override void Up(MigrationBuilder migrationBuilder)
{
migrationBuilder.CreateTable(
name: "States",
columns: table => new
{
Id = table.Column<int>(nullable: false)
.Annotation("SqlServer:Identity", "1, 1"),
State = table.Column<string>(maxLength: 30, nullable: true),
Code = table.Column<string>(maxLength: 3, nullable: true),
Description = table.Column<string>(nullable: true)
},
constraints: table =>
{
table.PrimaryKey("PK_States", x => x.Id);
});
migrationBuilder.CreateIndex(
name: "IX_States_State",
table: "States",
column: "State",
unique: true,
filter: "[Code] IS NOT NULL")
.Annotation("SqlServer:Include", new[] { "Code" });
}
这是我生成表格的SQL查询:
CREATE TABLE [dbo].[States]
(
[Id] [INT] IDENTITY(1,1) NOT NULL,
[State] [NVARCHAR](30) NULL,
[Code] [NVARCHAR](3) NULL,
[Description] [NVARCHAR](MAX) NULL,
CONSTRAINT [PK_States]
PRIMARY KEY CLUSTERED ([Id] ASC)
WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF,
IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON,
ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
) ON [PRIMARY] TEXTIMAGE_ON [PRIMARY]
GO
正如你所看到的,这些列不是唯一的且可为空。
我在这里漏掉了什么?