我是第一个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);
或者它是否自动知道有索引? 谢谢大家!
答案 0 :(得分:1)
索引是在数据库服务器上创建的。就像您不希望在编写SQL查询时显式引用索引一样,您不希望在编写LINQ查询时显式引用索引。实际上,您的实体将没有IX_NameAndCity
属性。所以只需使用您的第一个查询:
var property = _propertyRepository
.GetProperties()
.FirstOrDefault(x => x.Name == name && x.City == city);
实体框架将构造相应的SQL查询并将其传递给数据库服务器,数据库服务器将知道它应该(或可能不应该)使用索引来加速查询执行。它是透明的;别担心。