Entity framework 在主键实体框架6.0上创建非聚集索引

Entity framework 在主键实体框架6.0上创建非聚集索引,entity-framework,entity-framework-6,Entity Framework,Entity Framework 6,我知道,这表明不可能首先通过代码创建具有非聚集索引的主键。还是这样吗 理想情况下,我希望通过EntityTypeConfiguration指定我的主键(Guid)有一个非聚集索引,还有另一列(int)有聚集索引。AFAIK这在EntityTypeConfiguration中是不可能的。但是,您可以通过代码优先迁移来实现这一点。工作示例: public class Product { public Guid Id { get; set; } public int Pric

我知道,这表明不可能首先通过代码创建具有非聚集索引的主键。还是这样吗


理想情况下,我希望通过EntityTypeConfiguration指定我的主键(Guid)有一个非聚集索引,还有另一列(int)有聚集索引。

AFAIK这在EntityTypeConfiguration中是不可能的。但是,您可以通过代码优先迁移来实现这一点。工作示例:

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");
    }
}

您还可以使用
OnModelCreating
方法执行此操作,如下所示:

modelBuilder.Entity(entityTypeName)
    .HasKey(nameof(ClassName.Id))
    .ForSqlServerIsClustered(false);

谢谢我发现了一些类似的东西。我想当时情况仍然如此。我等了一会儿才接受。可能是@Korayem的重复,他说我使用EF 6.1?你标记了问题entity-framework-6,所以我假设是6.1。我编辑了标题并删除了重复的请求。非常感谢。为了搜索者的利益,我为EntityFramework Core创建了一篇相关文章,这也支持此功能-
modelBuilder.Entity(entityTypeName)
    .HasKey(nameof(ClassName.Id))
    .ForSqlServerIsClustered(false);