2016-08-17 6 views
14

मैं ईएफ कोर का नवीनतम (1.0.0) संस्करण उपयोग कर रहा हूं। मेरे पास एक बड़े डेटाबेस पर चलाने के लिए माइग्रेशन है।इकाई फ्रेमवर्क कोर माइग्रेशन टाइमआउट कैसे सेट करें?

मैं चलाएँ: ApplicationDbContext

-c

डॉटनैट एफई डेटाबेस अद्यतन और मिलती है:

समय समाप्त समाप्त हो गई है। के पूरा होने से पहले समय समाप्ति अवधि समाप्त हो गई है या सर्वर प्रतिक्रिया नहीं दे रहा है।

कनेक्ट समय समाप्त = 150000

दुर्भाग्य से, यह मदद नहीं की:

कनेक्शन स्ट्रिंग में मैं स्पष्ट रूप से ऐसा जैसे समाप्ति सेट। मुझे यह कैसे करना चाहिए?

उत्तर

15

आपको जो त्रुटि संदेश मिल रहा है वह कमांड टाइमआउट, कनेक्शन टाइमआउट नहीं है। ईएफ कमांड का उपयोग करते समय संदर्भ पर CommandTimeout सेट करने का कोई तरीका नहीं है। लेकिन आप इसे विश्व स्तर पर निर्माता में सेट कर सकते हैं, और फिर बाद में इसे हटा अगर आप इसे रखने की जरूरत नहीं है:

public class ApplicationDbContext : DbContext 
{ 
    public ApplicationDbContext() 
    { 
     Database.SetCommandTimeout(150000); 
    } 
} 
+0

बनाया समस्या के लिए निर्दिष्ट समय समाप्ति के लिए अनुमति के बारे में पूछ माइग्रेशन: https://github.com/aspnet/EntityFramework/issues/6613 –

+1

ध्यान दें कि ये सेकंड हैं, इसलिए यहां सेट टाइमआउट लगभग दो दिन है। – BobbyTables

+0

@ बॉबीबीटेबल्स हां - वास्तविक संख्या प्रश्न से आती है, लेकिन आपका बिंदु मान्य है। –

5

इकाई की रूपरेखा 6 का उपयोग करना, मैं DbMigrationsConfiguration.CommandTimeout संपत्ति का उपयोग कर माइग्रेशन के लिए एक लंबे समय तक टाइमआउट निर्धारित किया है।

इस तरह

:

मेरी Global.asax.cs में:

protected void Application_Start() 
{ 
    DatabaseMigrationConfig.Register(); 
    //etc 
} 

मेरे DatabaseMigrationConfig कक्षा:

public class DatabaseMigrationConfig 
{ 
    internal static void Register() 
    { 
     using (var context = new MyContext(Config.ConnectionStringMigrations)) 
     { 
      Database.SetInitializer(new MigrateDatabaseToLatestVersion<MyContext, 
             Migrations.Configuration>()); 
      context.Database.Initialize(false); 
     } 
    } 
} 

मेरे Migrations.Configuration वर्ग:

using System.Data.Entity.Migrations; 

internal sealed class Configuration : DbMigrationsConfiguration<MyContext> 
{ 
    public Configuration() 
    { 
     AutomaticMigrationsEnabled = false; 
     AutomaticMigrationDataLossAllowed = false; 
     CommandTimeout = 360;// <----- 6 minute timeout! 
    } 
} 

refe rences:

Migrations: timeout error in Update-Database commands DbMigrationsConfiguration.CommandTimeout Property

ध्यान दें कि मैं भी माइग्रेशन के दौरान एक अलग कनेक्शन स्ट्रिंग का उपयोग करें - उपयोगकर्ता वेबसाइट की तुलना में अधिक अनुमतियाँ और कनेक्शन समयबाह्य अब है। इस सवाल देखें - How to use a different connection string (but same database) for migrations

+0

क्या आप वाकई एंटीटी फ्रेमवर्क ** कोर ** के लिए मान्य हैं? – gisek

+0

मुझे यकीन नहीं है, क्योंकि मैं इसका उपयोग नहीं कर रहा हूं, लेकिन मैंने सोचा होगा कि यह जांचना आसान होगा कि मैंने इसे डाउनलोड किया था और इसे पहले से ही इस्तेमाल कर रहा था। क्या आप कह रहे हैं कि 'DbMigrationsConfiguration.CommandTimeout' को कोर से हटा दिया गया है? – Colin

+1

ईएफ कोर में कोई डीबी माइग्रेशन कॉन्फ़िगरेशन नहीं है। इसे हटा दिया गया है। –

1

आप केवल माइग्रेशन विधि कॉल करने से पहले संदर्भ पर समय-समाप्ति सेट द्वारा माइग्रेशन के लिए समय समाप्ति सेट कर सकते हैं:

using (var context = new DispatchingDbContext(_configuration)) 
{ 
    context.Database.SetCommandTimeout(300); 
    await context.Database.MigrateAsync().ConfigureAwait(false); 
} 

Set timeout for migrations ef .netcore

संबंधित मुद्दे