12

TLDR; Entity framework 5 kodlu geçişlerini kullanarak tam metin dizini nasıl eklersinizVarlık Çerçeve Kodlu Geçişler içinde tam metin dizini oluşturma

Entity çerçeve geçişlerini kullanarak bir veritabanına tam metin dizini eklerken sorunlar yaşıyorum. Başlangıçta orada olmalı, bu yüzden eklemek için otomatik olarak oluşturulan InitialCreate geçişini değiştirmeye çalışıyorum.

DbMigrations API'si aracılığıyla bunu yapmanın bir yolu olmadığı için, 'Yukarı' kodunun sonunda satır içi sql çalıştırmaya başvurdum. Bu bu sql ulaşana kadar her şey iyi oluşturulmuş olur çalıştığında

Sql("create fulltext catalog AppNameCatalog;"); 
Sql("create fulltext index on Document (Data type column Extension) key index [PK_dbo.Document] on AppNameCatalog;"); 

, o zaman bir kullanıcı hareket içinde kullanılamaz fulltext KATALOG oluşturma deyim sql hatası 'atar. '. Beklenen ve tasarlanan şekilde çalışıyor.

Neyse ki Sql(), taşıma işlemi dışındaki sql'yi çalıştırmanıza izin veren bir aşırı yüklemeye sahiptir. Korku veren! Düşündüm.

Sql("create fulltext catalog AppNameCatalog;", true); 
Sql("create fulltext index on Document (Data type column Extension) key index [PK_dbo.Document] on AppNameCatalog;", true); 

Ama düşük ve zaman aşımı süresi doldu, yeni bir zaman aşımı hatası 'içinde (yukarıya bakınız) sonuçları bunu yapmak için kodunu değiştirme beğenirsin. İşlemin tamamlanmasından önce zaman aşımı süresi doldu veya sunucu yanıt vermiyor. '

SQL'i tükürmeyi ve el ile çalıştırmayı denedim ve iyi çalışıyor. Ayrıca, oluşturulan sql'i bir işlemin dışında çalıştırıp kullanmadan da farklılaştırdım ve aynı şekilde sql'in yürütüldüğü şekilde bir şey olması gerekiyor.

Yardımlarınız için şimdiden teşekkür ederiz!

cevap

7

Benzer bir sorunla karşılaştım. InitialCreate geçişim bir tablo oluşturup daha sonra işlemin dışında yürütmek zorunda olduğunu belirtmek için aşırı yüklenmiş Sql() öğesini kullanarak bu tabloya tam metin dizini eklemeye çalışıyordu. Ayrıca bir zaman aşımı hatası alıyorum ve bunun bir iplik çıkmazından kaynaklandığından şüpheleniyorum.

Bazı senaryolarda CreateTable() yerine Sql() çağrılarını kullanarak ve CREATE FULL METİN KATALOG'U ve FULL METİN İNDEKS deyimlerini tek bir Sql() çağrısına birleştirerek çalışabilirim. Ancak, bu çok güvenilir değildi. Bazen çalışır ve bazen aynı zaman aşımı hatasıyla başarısız olur.

Bulduğum tek güvenilir çözüm, katalog ve tam metin dizininin oluşturulmasını ayrı bir geçişe taşımaktı.

+0

Hey, giriş için teşekkürler. O zaman ayrı bir göç olarak mı çalıştı? –

+1

Yip, Ayrı bir geçiş olarak çalışıyorum. Tablo oluşturma, InitialCreate geçişinde gerçekleşir ve Tam Metin Kataloğu ve Dizinler, InitialCreate geçişinden sonra gerçekleştirilmesi amaçlanan ayrı bir geçişte oluşturulur. – jspaey