首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >migrationBuilder如何确定要创建哪些索引?

migrationBuilder如何确定要创建哪些索引?
EN

Stack Overflow用户
提问于 2018-06-24 18:24:42
回答 2查看 3K关注 0票数 0

这是使用SQLCore2.0,EF,visual studio 2017,asp.net server 2016,并使用包管理器控制台中的添加-迁移工具通过包管理器控制台创建数据库迁移。

我有一个简单的多对多关系,配置如下,两个表和第三个'joining表‘:

代码语言:javascript
复制
public class TblTrack
{
    public int ID { get; set; }

     ...

    //Navigation properties
    public List<TblProductItem> ProductItems { get; set; }
}


public class TblProduct
{
    public int ID { get; set; }

    ...

    //Navigation properties
    public List<TblProductItem> ProductItems { get; set; }
}

public class TblProductItem
{
    [Key]
    [Required]
    public int ProductID { get; set; }

    [Key]
    [Required]
    public int TrackID { get; set; }


    //Navigation properties
    public TblProduct Product { get; set; }
    public TblTrack Track { get; set; }
}

这是通过迁移(在PMC中生成)来创建连接表:

代码语言:javascript
复制
migrationBuilder.AddPrimaryKey(
name: "PK_tbl_ProductItems",
table: "tbl_ProductItems",
columns: new[] { "ProductID", "TrackID" });

migrationBuilder.CreateIndex(
name: "IX_tbl_ProductItems_TrackID",
table: "tbl_ProductItems",
column: "TrackID");

请有人解释一下:

索引IX_tbl_ProductItems_TrackID的用途是什么

为什么为TrackID而不是为ProductID创建了索引

是否有其他设置可以确定在迁移过程中将创建哪些索引?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2018-06-24 21:01:09

默认情况下,EF会在每个外键引用的属性上自动创建索引(非唯一)。

确保EF正确地创建了TblProductTblProductItem之间的关系(例如,在SQL Server中通过扩展键)-如果没有,请使用Fluent Api显式指定关系。

对于其他设置,您可以要求使用上下文类中的方法创建索引,但如果设置了外键关系,则应自动生成索引。

代码语言:javascript
复制
protected override void OnModelCreating(ModelBuilder modelBuilder)
{
    modelBuilder.Entity<TblProductItem>()
        .HasIndex(e => e.TrackID);
}
票数 0
EN

Stack Overflow用户

发布于 2020-11-12 07:59:29

我也在为同样的事情苦苦挣扎。我发现,如果我颠倒了键的顺序(然而,使用Fluent ),它将为第二列创建索引。

因此,在我看来,在使用组合键时,框架中似乎存在一个bug。是ForeignKey注释导致了索引的建立,但是在这个过程中,它似乎认为主键只是第一列(在这种情况下,“主键”列不需要额外的索引),所以它只为第二列创建索引。但是主键是复合的,所以它可能也应该为第一列创建一个索引。

一种变通方法(如果您真的希望第一列也被索引)是按照公认答案中的建议进行操作。如果这个bug (AFAIK)稍后被修复,我不认为尝试创建一个额外的索引或任何东西会导致问题。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/51008996

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档