EF6 / Code First和索引:访问/使用索引有什么特别之处吗?

时间:2015-07-24 17:46:48

标签: linq indexing ef-code-first

我是第一个Code First项目。我刚学会了如何在两列上添加索引。

    [Required]
    [Index("IX_NameAndCity", 1, IsUnique = false)]
    [MaxLength(900)]
    public string Name { get; set; }

    [Index("IX_NameAndCity", 2, IsUnique = false)]
    [MaxLength(900)]
    public string City { get; set; }

这看起来不错吗? ^^^

LINQ中有什么特殊的东西可以使用这些索引还是透明的?我有一半期待在我的LINQ中看到'.IX_NameAndCity'的选择。

这就是我现在正在做的事情:

 var property = _propertyRepository
            .GetProperties()
            .FirstOrDefault(x => x.Name == name && x.City == city);

应该是这样的:

 var property = _propertyRepository
            .GetProperties()
            .FirstOrDefault(x => x.IX_NameAndCity.name == name && IX_NameAndCity.City == city);

或者它是否自动知道有索引? 谢谢大家!

1 个答案:

答案 0 :(得分:1)

索引是在数据库服务器上创建的。就像您不希望在编写SQL查询时显式引用索引一样,您不希望在编写LINQ查询时显式引用索引。实际上,您的实体将没有IX_NameAndCity属性。所以只需使用您的第一个查询:

var property = _propertyRepository
    .GetProperties()
    .FirstOrDefault(x => x.Name == name && x.City == city);

实体框架将构造相应的SQL查询并将其传递给数据库服务器,数据库服务器将知道它应该(或可能不应该)使用索引来加速查询执行。它是透明的;别担心。