[ Log On ]
สร้าง Index โดยการใช้ Database Initialization

วิธีสร้าง Index สำหรับ Code First นั้นยังไม่มีวิธีการง่ายๆ ด้วยการใช้ DataAnnotation หรือ Fluent API ไม่แน่ใจว่าใน EF 5 จะมีให้ใช้มั้ย

อยากให้ง่ายแบบนี้?

ใจจริงผมอยากให้มันมี Attribute ง่ายๆ แบบนี้แหละครับ

public class Person
{
   [Key]
   public Guid Id { get; set; }

   [UniqueIndex]
   public string Username { get; set; }

   [Index]
   public string MobilePhone { get; set; }
}

หรือใช้ Fluent API แบบนี้

Property(c => c.Username).IsUniqueIndex();
Property(c => c.MobilePhone).IsIndex()

ถ้ามี ชีวิตก็จะง่ายขึ้นอีกเยอะ แต่โลกความเป็นจริงในปัจจุบันมันยังไม่ง่ายขนาดนั้น :p

แล้วตอนนี้ต้องทำยังไง?

มันก็ไม่ถึงกับวุ่นวายมากมายเท่าไหร่หรอกครับ เพียงแค่สร้าง Database Initializer class มาอันนึง แล้ว override Seed() method ก็เท่านั้นเอง

public class PersonContextWithIndex : DropCreateDatabaseAlways<PersonDbContext>
{
   protected override void Seed(PersonDbContext context)
   {
      // create unique index
      context.Database.ExecuteSqlCommand("CREATE UNIQUE INDEX IX_Username ON Person (Username)");

      // create index
      context.Database.ExecuteSqlCommand("CREATE INDEX IX_MobilePhone ON Person (MobilePhone)");
   }
}

จากนั้นก็ไปเรียกใช้ได้ตามต้องการ (โดยปกติก็เรียกใช้ตรง Global.asax นั่นแหละครับ)

Database.SetInitializer(new PersonContextWithIndex());

ก็ไม่ได้ยาก..ใช่มั้ยครับ?

Happy Coding! :)