2011-02-18 19 views
9

Tablo var Person: id, nameTabloya dizin ekleme

Sık sorulanlar var:

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

2 sorum var:

  1. Bu kodu kod ilk 5 (CTP5) kullanarak nasıl uygularım?
  2. Sorgudaki gibi ada göre daha hızlı veri elde etmek için ad sütununa nasıl bir dizin ekleyebilirim?

cevap

22

fonksiyonunu tutar ile yapılabilir:

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

Endeksi SQL tarafından eklenmelidir - dizin oluşturmak için EF özel yapım yoktur. Bu SQL'i DB başlatma işleminden çalıştırabilirsiniz.

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

Sonra kaydetmeniz gerekir yeni başlatıcı:

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

gibi dizinleri oluşturabilir

Önce özel başlatıcı uygulamalıdır veri tohumlamak için 'Seed()' kullanmak ve sql komutu 'DbMigration.Up()' de yapılmalıdır. 'Up()' yönteminde dbContext'e erişmeye çalışıyorum ama şans yok, ama DbMigration.Sql() 'olduğunu buldum. Yukarı() 'da, sanki' this.Sql ("INDEX IX_Person_Name ON ONAY (Name)") diyebilirim. doğru yolda mıyım? – CallMeLaNN

+6

@CallMeLaNN: Evet. Bu soru, göçler daha önce serbest bırakıldı uzun zaman önce yanıtladı. Göçler kullanılırken, göçünüzde SQL komutunu 'Up' yöntemine yerleştirmelisiniz. –

+0

'SetInitializer' aranır? –

0

EF 6'da sana bekliyoruz bu

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