EF Code First为1到0..1关系创建冗余非聚簇索引

时间:2015-09-02 06:52:36

标签: entity-framework ef-code-first foreign-keys ef-migrations

考虑以下具有1:0..1关系的实体,其中Foo可能具有相关的FooBarFooBar.Id既是主键,也是Foo.Id的外键{1}}:

public class Foo
{
    public int Id {get; set;}
    public virtual FooBar FooBar {get; set;}
}

public class FooBar
{
    public int Id {get; set;}
}

modelBuilder.Entity<Foo>().HasOptional(e => e.FooBar).WithRequired();

这很有效,除了Up()中生成的迁移代码在FooBar.Id上包含冗余索引

CreateTable(
    "dbo.FooBar",
    c => new
        {
            Id = c.Int(nullable: false),
        })
    .PrimaryKey(t => t.Id)
    .ForeignKey("dbo.Foo", t => t.Id)
    .Index(t => t.Id);

正如您所看到的,对PrimaryKey的调用将创建一个聚簇索引,并且还有一个来自外键的Index调用脚手架。确实在数据库中,我看到了两个索引。如果我错了,请纠正我,但在这种情况下永远不会使用非聚集索引,而函数只是占用空间。

我认为这种情况正在发生,因为框架中的外键不知道主键。那么,有没有办法让EF实现列已经有来自主键的索引,而不是从外键中绑定一个额外的索引(不需要在迁移的Up()方法中手动修改代码并删除.Index()来电?

0 个答案:

没有答案