2017-11-14 3 views
0

Ich verwende das ASP.NET MVC 5-Framework, um ein einfaches Projekt zu implementieren. In diesem Projekt möchte ich Identity Framework Tables (Benutzer, Rollen, etc ..) sowie benutzerdefinierte Tabellen (Student, Vermieter, etc ..) verwenden.So füllen Sie Identity Framework-Tabellen und benutzerdefinierte Tabellen, ohne den Namen des ungültigen Objekts zu erhalten

Ich möchte auch die Tabellen mit einigen Werten initialisieren, deshalb habe ich die folgende Funktion zu mir nach Hause Controller:

public void PopulateAspNetTables() 
    { 
     context = new ApplicationDbContext(); 

     // Define Users and insert them to IF database : 
     // ********************************************** 
     var passwordHash = new PasswordHasher(); 
     string password = passwordHash.HashPassword("[email protected]"); 

     ApplicationUser user1 = new ApplicationUser 
     { 
      UserName = "user1", 
      Email = "[email protected]", 
      PasswordHash = password 
     }; 
     context.Users.AddOrUpdate(user1); 
     context.SaveChanges(); 
    } 

sowie:

public void PopulateOurDatabase() 
    { 

     dbCntxt = new DatabaseContext(); 

     stdnt = new Student {StudentID = 1, FirstName = "FN", LastName = "LN", Age = 27, Sex = "Male", ContactNumber = "123456", Email = "[email protected]", AcademicYear = 1, AcademicDegree = "Electrical Engineering", AcademicSubject = "blabla" }; 
     dbCntxt.Students.AddOrUpdate(stdnt); 
     dbCntxt.SaveChanges(); 

Die vorherigen zwei Funktionen im Home-Controller-Konstruktor aufgerufen werden:

public class HomeController : Controller 
    { 
    private DatabaseContext dbCntxt; 
    private ApplicationDbContext context; 


    private Student stdnt; 


    public HomeController() 
    { 

     PopulateOurDatabase(); 
     PopulateAspNetTables(); 
    } 
.... 
.... 
} 

Jetzt ist das Problem em ist, dass, wenn ich die beiden Funktionen im Konstruktor aufrufen, die erste richtig funktioniert, während der zweite immer einen Fehler wirft:

SqlException: Invalid object name 'dbo.AspNetUsers'. 

Wenn ich die Reihenfolge ändern, in der ich die Funktionen aufrufen, AspNetUsers Tabelle würde ordnungsgemäß erstellt werden, während derselbe Fehler in Bezug auf Student-Tabellen auftritt. Dies ist im Server Explorer deutlich zu sehen!

Warum passiert das?

Und da ich meinen eigenen Kontext erstellt habe, tritt dies auf, weil ich zwei verschiedene Kontexte verwende? Was ist die beste Vorgehensweise in diesem Fall?

Vielen Dank.

Antwort

0

Ich denke, ich fand die Antwort für meine Frage. Ich habe den InitialCatalog-Teil meiner Verbindungszeichenfolge aus irgendeinem Grund entfernt und vergessen, sie erneut hinzuzufügen. Nach einigem Graben hier und da habe ich herausgefunden, dass ich am wahrscheinlichsten, da ich zwei verschiedene Kontexte verwende, der Anwendung mitteilen muss, mit welcher Datenbank ich anfangen soll. Daher sollte InitialCatalog Teil da sein.

0

Ich habe nicht getestet, aber verwenden Sie "verwenden" Schlüsselwort, um jede Verbindung zu schließen.

public void PopulateOurDatabase() 
{ 
    using (dbCntxt = new DatabaseContext()) 
    { 
    stdnt = new Student {StudentID = 1, FirstName = "FN", LastName = "LN", 
    Age = 27, Sex = "Male", ContactNumber = "123456", Email = 
    "[email protected]", AcademicYear = 1, AcademicDegree = "Electrical 
    Engineering", AcademicSubject = "blabla" }; 
    dbCntxt.Students.AddOrUpdate(stdnt); 
    dbCntxt.SaveChanges(); 
    } 
+0

Leider hat das auch nicht funktioniert. – Rashedkoutayni

Verwandte Themen