2017-11-14 13 views
0

私は単純なプロジェクトを実装するためにASP.NET MVC 5フレームワークを使用しています。そのプロジェクトでは、アイデンティティ・フレームワーク・テーブル(ユーザー、ロールなど)とカスタマイズされたテーブル(学生、家主など)を使用したいと思います。無効なオブジェクト名を取得せずにIdentity Frameworkのテーブルとカスタムテーブルを作成する方法

私はまたそれゆえ、私は私のホームコントローラに以下の機能を追加した、いくつかの値を持つテーブルを初期化したいと思います:

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(); 
    } 

など:

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(); 

を以前の二つの関数ますHome Controllerコンストラクタで呼び出すことができます。

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


    private Student stdnt; 


    public HomeController() 
    { 

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

これで、probl二つ目は、常にエラーをスローしながら、EMが、私はコンストラクタで二つの機能を呼び出すたび、最初の1が正常に動作することです:

SqlException: Invalid object name 'dbo.AspNetUsers'. 

私は関数を呼び出す順序を変更した場合、AspNetUsersテーブルう私は生徒のテーブルに関して同じエラーが発生しますが、適切に作成されます。これは、サーバーエクスプローラではっきりと確認できます。

どうしてですか?

私自身のコンテキストを作成したので、これは2つの異なるコンテキストを使用しているために発生しますか?この場合のベストプラクティスは何ですか?

ありがとうございます。

答えて

0

私は私の質問の答えを見つけたと思う。いくつかのテストの理由で接続文字列のInitialCatalog部分を削除し、もう一度追加するのを忘れてしまった。ここで多くの掘り出しが行われた後、私は2つの異なるコンテキストを使用しているので、おそらく、どのデータベースから始めるべきかをアプリケーションに伝える必要があることがわかりました。 したがって、InitialCatalogの部分になるはずです。

0

私はテストしませんでしたが、各接続を閉じるために "using"キーワードを使用しました。

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

残念ながら、これはうまくいきませんでした。 – Rashedkoutayni

関連する問題