0

私は、ASP.NET ID(v2.1)とEntity Framework v6.1を利用するWeb Apiソリューションを用意しています。 Configuration.csファイルのSeed()メソッドの中に、私の最初のIdentityユーザーを作成するコードがあります。このコードはアイデンティティ・フレームワークを利用してパスワードをハッシュしたり、セキュリティ・スタンプなどを作成します。これらはすべてSQL経由では行えませんので、Up()メソッドを追加することはオプションのようには見えません。配備中にSeedメソッド内でコードを実行するにはどうすればよいですか?

protected override void Seed(ApplicationDbContext context) 
{ 
    // Create the admin user 
    var manager = new UserManager<ApplicationUser>(new UserStore<ApplicationUser>(new ApplicationDbContext())); 

    var roleManager = new RoleManager<IdentityRole>(new RoleStore<IdentityRole>(new ApplicationDbContext())); 

    var user = new ApplicationUser() 
    { 
     UserName = "adminuser", 
     Email = "[email protected]", 
     EmailConfirmed = true, 
     FirstName = "John", 
     LastName = "Does", 
     JoinDate = DateTime.Now.AddYears(-1) 
    }; 

    manager.Create(user, "SuperSecurePassword321!"); 

    if (roleManager.Roles.Count() == 0) 
    { 
     roleManager.Create(new IdentityRole { Name = "Admin" }); 
     roleManager.Create(new IdentityRole { Name = "Employee" }); 
     roleManager.Create(new IdentityRole { Name = "Customer" }); 
    } 

    var adminUser = manager.FindByName("adminuser"); 

    manager.AddToRoles(adminUser.Id, new string[] { "Admin" }); 
} 

これを公開するにはFTPを使用する必要があります(これを制御する必要はありません)。スキーマが設定されていて、データベースがデプロイされた後にこのコードを実行する方法に関する提案はありますか?

  1. 私が呼ばれたとき、それはこれを作成されるため、このコードオフ キックが、しかし、このエンドポイントが anonymousアクセスを許可しなければならないことをAPIエンドポイントの作成について考えている:私は考えた

    オプション最初のユーザーと システムで使用されるロール。私は何とか を無効にするか、後でこのエンドポイントを削除する必要があります。

  2. データベースをスクリプト化してデータを入れてから、展開対象のデータベースサーバー に復元します。

答えて

1

Seed()は、初めてデータベースにアクセスしたときに呼び出されます。その自動動作で何が問題になっていますか?

あなたはそれを手動で呼び出したい場合は、protected void Application_Start()にこのような何かを試してみてください。

Database.SetInitializer(new YourInititalizer()); 
var dbContext = new TheContextYouAreUsing(); 
dbContext.Database.Initialize(force: true); 
+0

は 'シードメソッドを呼び出すように設定することYourInitializer'てもらえますか? – webworm

+0

私が探しているのは、データベースに初めてアクセスしたときに'Seed() 'メソッドが呼び出されていないということです。私の場合、 'Seed()'メソッドは 'AspNetUsers'テーブルに単一のユーザを作成します。 'Update-Database -Script'コマンドを実行すると、私はスキーマ作成用のSQLを取得します。そのスキーマを使用してデータベースを作成できます。ただし、APIエンドポイントにアクセスしようとすると、呼び出しは失敗します。 APIエンドポイントは、ユーザー名/パスワードを確認するためにデータベースにアクセスする必要があります。ユーザーがいないために失敗します。 – webworm

関連する問題