13

कॉन्फ़िगर किया गया है मैं इकाई की रूपरेखा 7 और MVC6 का उपयोग करते समयकोई डेटाबेस प्रदाताओं EF7

System.InvalidOperationException कोई डेटाबेस प्रदाताओं कॉन्फ़िगर किया गया है यह त्रुटि संदेश मिल कर रहे हैं। सेवाओं को सेट करते समय अपने डीबीकॉन्टेक्स्ट क्लास या AddDbContext विधि में OnConfiguring को ओवरराइड करके डेटाबेस प्रदाता को कॉन्फ़िगर करें।

मेरा मानना ​​है कि मैंने जो कुछ भी किया है, वह सब किया है, तो शायद यह एक बग है। मैं इकाई फ्रेमवर्क के संस्करण 7.0.0-बीटा 7 का उपयोग कर रहा हूं।

मैंने अपना डीबीकॉन्टेक्स्ट, एक इंटरफ़ेस सेटअप किया है, इसलिए मैं डीबीकॉन्टेक्स्ट का नकल कर सकता हूं (इकाई परीक्षण के लिए एंटीटीफ्रेमवर्क 6 में आवश्यक था)। मेरे सेवाओं एक निर्माता के रूप में इंटरफ़ेस लेने के लिए और मैं MVC 6. में सेटअप डि

मेरी Startup.cs में है फ़ाइल मैं निम्नलिखित है

public void ConfigureServices(IServiceCollection services) 
{ 
    // entity framework 
    services.AddEntityFramework() 
     .AddSqlServer() 
     .AddDbContext<MyDbContext>(options => 
      options.UseSqlServer(Configuration["Data:MyConnection:ConnectionString"]) 
     ); 

    // Add MVC services to the services container. 
    services.AddMvc(); 

    // new context on each request 
    services.AddScoped<IMyDbContext, MyDbContext>(); 
} 

मैं अपने connectionstring जाँच की है और कहा कि कोई मान्य कनेक्शन लौटा रहा है । मैंने अपनी सेवा में भी जांच की है कि ऑब्जेक्ट इंजेक्शन दिया जा रहा है, और यह शून्य नहीं है, इसलिए सभी को काम करना चाहिए। के रूप में मैं यह सब के रूप में ऊपर कर रहा हूँ

मेरे config.json फ़ाइल, इस

{ 
    "Data": { 
     "MyConnection": { 
      "ConnectionString": "Server=(local);Database=XXXX;Trusted_Connection=True;" 
     } 
    } 
} 

मेरे DbContext OnConfiguring विधि पर हावी नहीं होता की तरह लग रहा है, क्योंकि मेरा मानना ​​है यह आवश्यक नहीं है? क्या मैं सही हू? मैं क्या खो रहा हूँ? कई अलग-अलग वेबसाइटों पर देखा, मुझे लगता है कि कुछ पुराने कोड का उपयोग कर रहे हैं, क्योंकि कुछ विधियां मौजूद नहीं हैं और अन्य वेबसाइटों के पास मेरे जैसा ही है।

+0

कैसे आप कोड में अपने 'MyDbContext' बना रहे हैं? – DavidG

उत्तर

26

Startup.cs AddDbContext() कॉल में परिभाषित विकल्पों पैरामीटर को इंजेक्ट करने के लिए नीचे दिखाया गया मेरा MyDbContext सेटअप करें।

public MyDbContext(DbContextOptions options) 
: base(options) 
{ } 

यह आपको विन्यास (config.json) विधि कॉल options.UseSqlServer()

services.AddEntityFramework() 
    .AddSqlServer() 
    .AddDbContext<MyDbContext>(options => options.UseSqlServer(Configuration["Data:MyConnection:ConnectionString"])); 

जब मैं विभाजित करने के लिए किया था मैं एक ही समस्या का सामना करना पड़ा में से अपने कनेक्शन स्ट्रिंग पारित करने के लिए अनुमति देगा अलग-अलग परियोजनाओं में मेरा समाधान वेब, बीएल, और डीएएल।

+0

बिल्कुल सही! धन्यवाद – Gillardo

+0

यदि आप डीबीकॉन्टेक्स्ट को मॉक करना चाहते हैं तो आपको इंटरफ़ेस की आवश्यकता नहीं है।बस डीबीसेट वर्चुअल बनाएं ताकि आप उन पर नकल कर सकें। मुझे लगता है कि आप संदर्भ नकल नहीं करना चाहते हैं। डाटाबेस या संदर्भ। कॉन्फ़िगरेशन और इकाई ढांचे का परीक्षण ;-) – Pascal

+0

आप नियंत्रक में MyDbContext को तुरंत कैसे चालू करेंगे या जहां भी आपको इसका उपयोग करने की आवश्यकता है? –

1

मैंने कुछ हफ्ते पहले विजुअल स्टूडियो 2015 में इस समस्या को मारा।

मुझे startup.cs में निर्भरता इंजेक्शन संग्रह में संदर्भ जोड़ना पड़ा।

और अधिक विस्तार के लिए यहाँ देखें - http://nodogmablog.bryanhogan.net/2016/01/how-to-fix-no-database-providers-are-configured-when-scaffolding-a-controller-in-asp-net-5/

4

मैं belive कि आप लाइन जहां डेटाबेस से कुछ डेटा का उपयोग करने की कोशिश कर रहा पर यह त्रुटि मारा। आप अपने संदर्भ को confiuguring द्वारा इस समस्या को हल कर सकते हैं। बस ऑनकॉन्फिगरिंग विधि को ओवरराइड करें।

public class MyDbContext : DbContext 
{ 
    public DbSet<Employee> Employees { get; set; } 

    protected override void OnConfiguring(DbContextOptionsBuilder options) 
    { 
     options.UseSqlServer("<your connection string>"); 
    } 

    protected override void OnModelCreating(ModelBuilder modelBuilder) 
    { 
     ... 
    } 
} 
1

प्रयास करें निम्नलिखित:

public class DataContext<TEntity> : DbContext where TEntity : class 
{ 

    private TEntity _entity = null; 
    public DataContext() 
     : base() 
    { 

    } 
    public DataContext(TEntity entity) 
    { 
     this._entity = entity; 
    } 
    public DbSet<TEntity> Entity { get; set; } 


    protected override void OnModelCreating(ModelBuilder modelBuilder) 
    { 
     base.OnModelCreating(modelBuilder); 
     modelBuilder.HasDefaultSchema("dbo"); 

    } 

    public IConfigurationRoot Configuration { get; set; } 

    protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder) 
    { 
     var configuration = new ConfigurationBuilder() 
       .AddJsonFile("appsettings.json"); 
     Configuration = configuration.Build(); 
     optionsBuilder.UseSqlServer(Configuration["Data:DefaultConnection:ConnectionString"]); 
    } 
} 
संबंधित मुद्दे