向表添加索引

发布于 2024-10-18 04:29:38 字数 258 浏览 3 评论 0原文

我有一个表 Person: id, name

我经常有这样的查询:

select * from Person where name Like "%abc%".

我有 2 个问题:

  1. 使用 code-first 5 (CTP5) 实现此查询
  2. 如何 我在名称列上添加索引,以便像查询中那样根据名称更快地检索数据?

I have a table Person: id, name

I often have queries like:

select * from Person where name Like "%abc%".

I have 2 questions:

  1. How do I implement this query using code-first 5 (CTP5)
  2. How do I add an index on the name column to make data retrieval faster based on name like in the query?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

横笛休吹塞上声 2024-10-25 04:29:38

Like 运算符可以与 Contains 函数一起执行:

var query = from p in context.Persons
            where p.Name.Contains("abc")
            select p;

索引必须由 SQL 添加 - EF 中没有特殊的构造来创建索引。您可以从数据库初始化中执行此 SQL。

首先,您必须实现自定义初始化程序:

public class MyInitializer : CreateDatabaseIfNotExists<MyContext>
{
  protected override void Seed(MyContext context)
  {
    context.Database.SqlCommand("CREATE INDEX IX_Person_Name ON Person (Name)");
  }
}

然后您必须注册新的初始化程序:

DbDatabase.SetInitializer<MyContext>(new MyInitializer());

Like operator can be performed with Contains function:

var query = from p in context.Persons
            where p.Name.Contains("abc")
            select p;

Index must be added by SQL - there is no special construction in EF to create index. You can execute this SQL from DB initialization.

First you must implement custom initializer:

public class MyInitializer : CreateDatabaseIfNotExists<MyContext>
{
  protected override void Seed(MyContext context)
  {
    context.Database.SqlCommand("CREATE INDEX IX_Person_Name ON Person (Name)");
  }
}

Then you must register new initializer:

DbDatabase.SetInitializer<MyContext>(new MyInitializer());
要走就滚别墨迹 2024-10-25 04:29:38

在 EF 6 中你可以像这样创建索引

   Property(t => t.TotalValue)
            .HasColumnAnnotation(
                IndexAnnotation.AnnotationName,
                new IndexAnnotation(new IndexAttribute("IX_inventory_import_total_value", 1))
            );

in EF 6 you can create indexes like this

   Property(t => t.TotalValue)
            .HasColumnAnnotation(
                IndexAnnotation.AnnotationName,
                new IndexAnnotation(new IndexAttribute("IX_inventory_import_total_value", 1))
            );
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文