0

以前,在使用 Code First 创建表时,我使用数据库初始化程序来播种或预填充我的表。这一切都很好,但我想继续使用 EF 4.3 迁移。

我在我的项目中更新到 EF 4.3 并删除了数据库初始化程序代码并将其放在迁移 Configuration.cs 文件的 Seed 方法中。除了我想将默认用户播种到我的用户表中之外,这对我来说一切正常,可以预先填充我的表。

我在我的 Seed 方法中使用以下代码:(目前这不使用 AddOrUpdate 代码,因为我不确定如何在这种情况下使用它 - 因此检查用户名)

        // create default User
        MembershipCreateStatus status = new MembershipCreateStatus();
        User admin = context.Users.Find("TestGuy");
        if (admin == null)
        {
            Membership.CreateUser("TestGuy", "TestGuy123", "testguy@test.com");
            if (status == MembershipCreateStatus.Success)
            {
                admin.Firstname = "Test";
                admin.Surname = "Guy";
                admin.DateLastActivity = DateTime.Now;
                admin.LastActivityRoute = "/Home/Index";
                Role adminRole = context.Roles.Find("Administrator");
                admin.Roles = new List<Role>();
                admin.Roles.Add(adminRole);
            }
        }

当我尝试运行 Update-Database 时,出现此错误:

The password-answer supplied is invalid.

我认为这取决于我如何调用 CreateUser 但我似乎无法解决如何解决这个错误。我试过只为安全问题和答案输入空值,但这似乎不起作用。

有没有人使用“AddOrUpdate”选项播种用户的例子?

编辑1:

根据以下评论之一,我正在使用 Altairis Security Toolkit 来管理我的会员资格。我的 web.config 设置如下:

<membership defaultProvider="TableMembershipProvider">
  <providers>
    <clear />
    <add name="TableMembershipProvider" type="Altairis.Web.Security.TableMembershipProvider, Altairis.Web.Security" connectionStringName="DataContext" minRequiredPasswordLength="8" requiresQuestionAndAnswer="false" requiresUniqueEmail="true" minRequiredNonAlphanumericCharacters="0" passwordStrengthRegularExpression="" />
  </providers>
</membership>

编辑2:

我也在 Altairis 论坛上将此作为公开票。 http://altairiswebsecurity.codeplex.com/workitem/32273

编辑 3:

为了让这个工作没有任何错误,我必须按如下方式设置我的代码:

        // create default User
        MembershipCreateStatus status = new MembershipCreateStatus();
        User admin = context.Users.Find("TestGuy");
        if (admin == null)
        {
            Membership.CreateUser("TestGuy", "TestGuy123", "testguy@test.com", null, null, true, out status);
            if (status == MembershipCreateStatus.Success)
            {
                admin = context.Users.Find("TestGuy");
                admin.Firstname = "Test";
                admin.Surname = "Guy";
                admin.DateLastActivity = DateTime.Now;
                admin.LastActivityRoute = "/Home/Index";
                Role adminRole = context.Roles.Find("Administrator");
                admin.Roles = new List<Role>();
                admin.Roles.Add(adminRole);
            }
        }

运行 Update-Database 但没有生成新用户时,以上内容现在将编译。如果有人有建议尝试,那就太好了!

谢谢,

富有的

4

2 回答 2

0

通过对这个问题进行一些研究,很明显应该在迁移种子逻辑之外创建用户种子 - 至少现在直到它们更容易做到!

作为解决方法,我按照这个 Stackoverflow 问题(在实体框架 4.3 中增量播种数据的最佳方式)中的示例手动使我的新用户在迁移配置文件之外启动。

至少对我而言,这并不理想,因为所有“启动”数据都不在一个领域,但它可以完成工作并且并不难遵循。

于 2012-02-21T09:28:24.160 回答
0

我认为您的会员资格设置为需要问答。您是否尝试过使用“if (Membership.RequiresQuestionAndAnswer)”进行检查并查看它的分支方式。

致管理员:顺便说一句,我想首先将其作为评论发布,因为我上次在使用答案时被标记,但我在这里看不到任何添加评论的选项,只有答案。

于 2012-02-17T10:11:08.833 回答