我正在运行EF 4.2 CF并想在我的POCO对象的某些列上创建索引.
举个例子,假设我们有这个员工类:
public class Employee
{
public int EmployeeID { get; set; }
public string EmployeeCode { get; set; }
public string FirstName { get; set; }
public string LastName { get; set; }
public DateTime HireDate { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
我们经常通过EmployeeCode对员工进行搜索,因为有很多员工,因为性能原因而将索引编入索引会很不错.
我们能用流利的api以某种方式做到这一点吗?或者数据注释?
我知道可以执行这样的sql命令:
context.Database.ExecuteSqlCommand("CREATE INDEX IX_NAME ON ...");
Run Code Online (Sandbox Code Playgroud)
我非常想避免那样的原始SQL.
我知道这不存在,但寻找沿着这些方向的东西:
class EmployeeConfiguration : EntityTypeConfiguration<Employee>
{
internal EmployeeConfiguration()
{
this.HasIndex(e => e.EmployeeCode)
.HasIndex(e => e.FirstName)
.HasIndex(e => e.LastName);
}
}
Run Code Online (Sandbox Code Playgroud)
或者使用System.ComponentModel.DataAnnotationsPOCO可能看起来像这样(我知道这不存在):
public class Employee
{ …Run Code Online (Sandbox Code Playgroud) c# fluent-interface entity-framework-4 data-annotations ef-code-first
那么现在在最新测试版的Entity Framework 6.1中可以使用索引,是否可以在代码优先方法中创建一个与此SQL语句相同的索引?
CREATE NONCLUSTERED INDEX [Sample1]
ON [dbo].[Logs] ([SampleId],[Date])
INCLUDE ([Value])
Run Code Online (Sandbox Code Playgroud) 从EF6.1开始,我们可以在属性上指定聚簇索引
public class Person
{
[Index(IsClustered = true, IsUnique = true)]
public long UserName { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
但是这个Index属性现在似乎不在EF Core中?在EF Core中你是如何实现这一目标的?
在Entity Framework Code First方法中,我们可以将主键定义为非聚簇索引,并将其他几个字段组合为聚簇索引.
谢谢
我知道这一点,它表明不可能首先通过代码创建具有非聚集索引的主键.这仍然是这样吗?
理想情况下,我想通过EntityTypeConfiguration指定我的主键(Guid)有一个非聚集索引,还有另一个列(int)带有聚簇索引.