我知道this,它指出不可能首先通过代码创建具有非聚集索引的主键。这仍然是这样吗?
理想情况下,我想通过EntityTypeConfiguration指定我的主键(Guid)有一个非聚集索引,还有另一个列(int)带有聚簇索引。
答案 0 :(得分:5)
AFAIK使用EntityTypeConfiguration无法做到这一点。但是,您可以使用Code-First迁移执行此操作。工作示例:
public class Product
{
public Guid Id
{ get; set; }
public int Price
{ get; set; }
}
class AppDbContext : DbContext
{
public DbSet<Product> Products
{ get; set; }
}
public partial class InitialCreate : DbMigration
{
public override void Up()
{
CreateTable(
"dbo.Products",
c => new
{
Id = c.Guid(nullable: false),
Price = c.Int(nullable: false),
})
.PrimaryKey(t => t.Id, clustered: false)
.Index(t => t.Price, clustered: true);
}
public override void Down()
{
DropIndex("dbo.Products", new[] { "Price" });
DropTable("dbo.Products");
}
}
结果:
CREATE TABLE [dbo].[Products] (
[Id] UNIQUEIDENTIFIER NOT NULL,
[Price] INT NOT NULL,
CONSTRAINT [PK_dbo.Products] PRIMARY KEY NONCLUSTERED ([Id] ASC)
);
GO
CREATE CLUSTERED INDEX [IX_Price]
ON [dbo].[Products]([Price] ASC);
答案 1 :(得分:0)
您还可以使用OnModelCreating
方法执行此操作,如下所示:
modelBuilder.Entity(entityTypeName)
.HasKey(nameof(ClassName.Id))
.ForSqlServerIsClustered(false);