嗯,这个问题很清楚。是否可以使用Entity Framework 6.1流畅的API创建空间索引?
答案 0 :(得分:4)
我知道这样做的唯一方法是通过“自定义”迁移。在EF6中,我添加了一个迁移(在下面的示例中,它名为“V1”),导致使用空的Up()和Down()方法进行新的迁移。然后,您可以在运行update-database之前将自定义SQL命令添加到这些方法,以将这些命令放入“正常”迁移流程中。
可以修改现有迁移以添加这些功能,但我更倾向于将自动支架迁移与自定义迁移分开。
public partial class V1 : DbMigration
{
public override void Up()
{
Sql("CREATE SPATIAL INDEX [IX_UserProfileAddresses_Location] ON [dbo].[UserProfileAddresses](Location)");
}
public override void Down()
{
Sql("DROP INDEX [IX_UserProfileAddresses_Location] ON [dbo].[UserProfileAddresses]");
}
}
不是理想的方法,但也不是太糟糕,因为它确实遵循EF的“正常”迁移模式。
答案 1 :(得分:1)
简短回答 - 不,不是。我已经在整个blogs中切向引用了这一点,并且没有找到具体的实现示例。这似乎与空间索引是过滤索引这一事实有关,而实体框架中不支持这些索引。
作为对我的回答的支持,我构建了一个POC控制台应用程序,其中包含最新版本的Entity Framework(6.1)。我采取了以下步骤
Ran Update-Database -verbose运行时通过添加索引确保迁移。索引使用了以下内容:
modelBuilder.Entity<LocationEntity>().Property(t => t.Coordinates).HasColumnAnnotation("Index", new IndexAnnotation(new IndexAttribute("ix_locationentity_coordinates")));
没有创建索引,但应用程序也没有崩溃。我可以尝试对此进行排列,但我的例子似乎遵循实体框架的惯例:Official Fluent Documentation