2017-05-03 7 views
5

मैं समस्या आ रही है का उपयोग करना है कि जब मैं अपने PartsDbContext में एक क्षेत्र तक पहुँचने का प्रयास मैं निम्नलिखित त्रुटि मिलती है:इकाई की रूपरेखा कोर कई DbContexts

System.Data.SqlClient.SqlException: 'Invalid object name 'fieldName''

ऐसा लगता है कि इस वजह से मैं कोशिश कर रहा हूँ मेरे पार्ट्स डीबीकॉन्टेक्स्ट को मेरे एप्लीकेशन डीबीकॉन्टेक्स्ट के समान डेटाबेस का उपयोग करें जिसका उपयोग पहचान के साथ किया जाता है। मुझे यह जानने की ज़रूरत है कि ईएफ कोर के साथ काम करने के लिए दूसरा dbcontext कैसे सेट करें जो एक अलग डेटाबेस का उपयोग/बनाता है।

मैं एक 2 कनेक्शन स्ट्रिंग बनाने की कोशिश की है, लेकिन है कि मुझे इस त्रुटि हो जाता है:

appsettings.json

"ConnectionStrings": { 
    "DefaultConnection": "Server=(localdb)\\mssqllocaldb;Database=aspnet-PrecisionCustomPC-b14db89e-86ad-4855-a17f-ac64a04339aa;Trusted_Connection=True;MultipleActiveResultSets=true", 
    "PartsConnection": "Server=(localdb)\\mssqllocaldb;Database=PartsDb" 
}, 
"Logging": { 
    "IncludeScopes": false, 
    "LogLevel": { 
     "Default": "Warning" 
    } 
} 

PartsDbContext:

System.Data.SqlClient.SqlException: 'Cannot open database "PartsDb" requested by the login. The login failed. Login failed for user 'DESKTOP-4VPU567\higle'.'

यहाँ मेरी कोड है। सीएस

public class PartsDbContext : DbContext 
{ 
    public DbSet<PartsViewModels.Tower> Towers { get; set; } 
    public DbSet<PartsViewModels.Motherboard> Motherboards { get; set; } 

    public PartsDbContext(DbContextOptions<PartsDbContext> options) 
     : base(options) 
    { 
    } 
} 

Startup.cs

public void ConfigureServices(IServiceCollection services) 
{ 
    // Add framework services. 
    services.AddDbContext<ApplicationDbContext>(options => 
     options.UseSqlServer(Configuration.GetConnectionString("DefaultConnection"))); 

    services.AddIdentity<ApplicationUser, IdentityRole>() 
     .AddEntityFrameworkStores<ApplicationDbContext>() 
     .AddDefaultTokenProviders(); 

    services.AddEntityFramework() 
     .AddDbContext<PartsDbContext>(options => 
      options.UseSqlServer(Configuration.GetConnectionString("PartsConnection"))); 

    services.AddMvc(); 

    services.AddAuthorization(options => 
    { 
     options.AddPolicy("RequireAdminRole", policy => policy.RequireRole("Admin")); 
    }); 

    // Add application services. 
    services.AddTransient<IEmailSender, AuthMessageSender>(); 
    services.AddTransient<ISmsSender, AuthMessageSender>(); 
} 

AdminController.cs

[Authorize(Policy = "RequireAdminRole")] 
public class AdminController : Controller 
{ 
    private readonly PartsDbContext _context; 

    public AdminController(PartsDbContext context) 
    { 
     _context = context; 
    } 

    public IActionResult Index() 
    { 
     return View(); 
    } 

    public IActionResult Towers() 
    { 
     var model = _context.Towers.ToList(); 
     return View(model); 
    } 
} 

लाइन var model = _context.Towers.ToList(); है जहां त्रुटि को दिखा रहा है।

एक बार फिर से। मैं एंटिटी फ्रेमवर्क कोर के साथ काम करने के लिए अपने पार्ट्स डीबीकॉन्टेक्स्ट को सेटअप करना चाहता हूं ताकि ईएफ-कोर स्वचालित रूप से डेटाबेस बना सके।

+0

आप 'जगह Ty कर सकता है" PartsConnection ":।" सर्वर = (localdb) \\ mssqllocaldb; डेटाबेस = पार्ट्स डीबी "' "पार्ट्सकनेक्शन" के साथ ": सर्वर = (localdb) \\ mssqllocaldb; डेटाबेस = पार्ट्सडीबी; Trusted_Connection = True" '? –

उत्तर

7

मैंने इसे समझ लिया। यह ज्यादातर इसलिए आया क्योंकि मैंने गलती से डेटाबेस को हटा दिया था जो पहचान का उपयोग कर रहा था और मुझे यह पता लगाने की आवश्यकता थी कि इसे वापस कैसे प्राप्त किया जाए।

स्पष्ट रूप से मेरे कनेक्शन स्ट्रिंग के साथ कुछ भी गलत नहीं है। मैं तो बस इस क्रम में पैकेज प्रबंधक में जाने और इन आदेशों को टाइप करने की जरूरत:

  1. Add-Migration init -Context PartsDbContext
  2. Update-Database -Context PartsDbContext

मैं इस में पता चला क्योंकि है कि मैं अपने ApplicationDbContext पाने के लिए करना था क्या फिर से काम करना और यह पता चला है कि जब आप व्यक्तिगत उपयोगकर्ता प्रमाणीकरण का उपयोग कर विजुअल स्टूडियो में एक नया एमवीसी कोर वेब अनुप्रयोग बनाते हैं तो यह कदम आपके लिए किया जाता है।

  1. एक DbContext कक्षा
  2. बनाएं appsettings.json
  3. अपने कॉन्फ़िगर करने के लिए DbContext जोड़े में है कि DbContext के लिए एक कनेक्शन स्ट्रिंग बनाएँ:

    तो मूल रूप से अधिक DbContexts जोड़ने के चरण के लिए है में सेवाएं स्टार्टअप.cs

  4. नियंत्रकों में डीबीकॉन्टेक्स्ट सेटअप करें जो इसका उपयोग करेंगे।
  5. पैकेज प्रबंधक खोलें और उपरोक्त 2 पंक्तियां चलाएं। (यदि "-Context" काम नहीं करता है की कोशिश "--context"
  6. अपने कार्यक्रम चलाने के लिए और EntityFrameworkCore बाकी की देखभाल करते हैं
+0

क्या आप एकाधिक डेटाबेस का एक ही डेटाबेस उपयोग कर रहे हैं? यदि पूर्व , आप EFMigrationsHistory तालिका में प्रत्येक संदर्भ के लिए माइग्रेशन कैसे अलग करते हैं? – dotnethaggis

+1

मैं एकाधिक डेटाबेस का उपयोग कर रहा हूं –

+0

क्या होगा यदि आपके पास स्टार्टअप में पर्यावरण की स्थिति है जो निर्धारित करता है कि कौन से appsettings.json कनेक्शन स्ट्रिंग को दिए गए संदर्भ के लिए उपयोग करना है? आप कैसे जानते हैं कौन सा एक बजे कंसोल उपयोग करने जा रहा है? – DiscipleMichael

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