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 的异常。看起来我已经有了,所以我有点困惑。任何帮助都会很棒。我应该提到我是 webforms 身份验证的新手。感谢您的理解和解答!

4

1 回答 1

0

查看这篇关于播种和自定义 SimpleMembership的文章。它可能会为您提供有关正确初始化 SimpleMembership 数据库的一些提示。本文讨论了修改 SimpleMembership 的初始化方式,这比使用InitializeSimpleMembershipAttribute更直接。您需要在几个地方调用初始化数据库,因为播种并不总是发生,它需要在您的种子方法中才能工作。所以安全的方法是在调用它之前首先检查它是否已经被初始化,如下面的代码片段所示。

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