2017-08-25 9 views
5

का उदाहरण प्राप्त करें मैं डीबीकॉन्टेक्स्ट का एक उदाहरण प्राप्त करने की कोशिश कर रहा हूं (इसलिए मैं इसके साथ स्टार्टअप पर कुछ अतिरिक्त काम कर सकता हूं), मुझे एक उदाहरण प्राप्त करने का प्रयास करते समय निम्न त्रुटि मिलती है कॉन्फ़िगर विधि:एएसपी.नेट कोर 2 + डीबी संदर्भ

सिस्टम। इन्वाइडऑपरेशन अपवाद: 'स्कोप्ड सेवा को हल नहीं कर सकता' MyApp.Data.MyDbContext 'रूट प्रदाता से'।

public void ConfigureServices(IServiceCollection services) 
{ 
services.AddDbContext<MyDbContext>(
       options => options.UseSqlServer(Configuration.GetConnectionString("MyDbContext"))); 
} 

public void Configure(IApplicationBuilder app, IHostingEnvironment env) 
{ 

    var dbContext = app.ApplicationServices.GetService(typeof(MyDbContext)) as MyDbContext; 
} 

मैं नियंत्रक के माध्यम से DbContext ठीक का एक उदाहरण का उपयोग कर सकते, आदि

+1

आप कॉन्फ़िगरेशन विधि पर निर्भरता जोड़ सकते हैं और वे स्वचालित रूप से हल हो जाएंगे। सार्वजनिक शून्य कॉन्फ़िगर करने के लिए हस्ताक्षर बदलने का प्रयास करें (IAplicationBuilder ऐप, IHostingEnvironment env, MyDbContext dbContext) –

उत्तर

7

पॉल Hiles टिप्पणी सही है लेकिन यह है कि विधि नेट कोर 1.0 में बेहतर काम करता है।

एएसपी.नेट कोर 2.0 में Startup.cs में किसी भी डेटाबेस सेटअप को चलाने के लिए आम तौर पर एक बुरा विचार है। ऐसा इसलिए है क्योंकि यदि आप सीएलआई या विजुअल स्टूडियो से किसी भी माइग्रेशन चलाते हैं तो यह Startup.cs चलाएगा और आपकी कॉन्फ़िगरेशन चलाने की कोशिश करेगा जो असफल हो जाएगा। बेशक यदि आप एंटीटी-फ्रेमवर्क का उपयोग नहीं करते हैं तो यह कोई समस्या नहीं है हालांकि यह 2.0 में इसे करने का अनुशंसित तरीका नहीं है। अब इसे Program.cs में करने की अनुशंसा की जाती है।

उदाहरण के लिए आप IWebHost का एक विस्तार तरीका बना सकते हैं जो आपको आवश्यक सेटअप चलाएगा।

public static IWebHost MigrateDatabase(this IWebHost webHost) 
{ 
    var serviceScopeFactory = (IServiceScopeFactory)webHost.Services.GetService(typeof(IServiceScopeFactory)); 

    using (var scope = serviceScopeFactory.CreateScope()) 
    { 
     var services = scope.ServiceProvider; 
     var dbContext = services.GetRequiredService<YourDbContext>(); 

     dbContext.Database.Migrate(); 
    } 

    return webHost; 
} 

और फिर Program.cs में आप तो उस विधि को चलाने से पहले फोन कर सकते हैं।

public static void Main(string[] args) 
{ 
    BuildWebHost(args) 
     .MigrateDatabase() 
     .Run(); 
} 
संबंधित मुद्दे