0

だから私は次の初期化子でデータベースをシードしようとしています

public class DbInitializer : DropCreateDatabaseAlways<IAMContext>
{
    protected override void Seed(IAMContext context)
    {

        WebSecurity.InitializeDatabaseConnection("IAMContext",
          "UserProfile", "UserId", "UserName", autoCreateTables: true);
        var roles = Roles.Provider;
        var membership = Membership.Provider;

        if (!roles.RoleExists("Admin"))
        {
            roles.CreateRole("Admin");
        }
        if (!WebSecurity.UserExists("test"))
        {
            WebSecurity.CreateUserAndAccount("test", "password");
        }

        if (!roles.GetRolesForUser("test").Contains("Admin"))
        {
            roles.AddUsersToRoles(new[] { "test" }, new[] { "admin" });
        }

        context.Products.Add(new Product
        {
            Id = 1,
            Name = "Homunculi",
            Price = 85,
            LongDescription = "Happens when failed human transmutations occur", 
            ShortDescription = "Failed Xmute", 
            media = "CD"
        });


        base.Seed(context);
    }
}

最初に WebSecurity.InitializeDatabaseConnection を呼び出す必要があるという例外が常に発生します。すでに持っているようで、少し混乱しています。どんな助けでも素晴らしいでしょう。Webフォーム認証は初めてです。ご理解とご回答ありがとうございます。

4

1 に答える 1

0

SimpleMembership のシードとカスタマイズに関するこの記事を確認してください。SimpleMembership データベースの適切な初期化に関するヒントが得られる場合があります。この記事では、 InitializeSimpleMembershipAttributeを使用するよりも単純な SimpleMembership の初期化方法の変更について説明します。シードは常に発生するとは限らず、動作させるにはシード メソッドに含める必要があるため、いくつかの場所でデータベースを初期化するための呼び出しが必要です。したがって、安全な方法は、次のコード スニペットに示すように、呼び出す前に、既に初期化されているかどうかを最初に確認することです。

  if (!WebMatrix.WebData.WebSecurity.Initialized)
      WebMatrix.WebData.WebSecurity.InitializeDatabaseConnection("SimpleSecurityConnection",
          "UserProfile", "UserId", "UserName", autoCreateTables: true);
于 2013-08-15T14:41:04.613 に答える