以前,我使用数据库初始化程序在使用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时编译,但不会生成新用户。如果有人有建议尝试那将是伟大的!
谢谢,
富
答案 0 :(得分:0)
我认为您的会员资格需要提问和回答。您是否尝试使用“if(Membership.RequiresQuestionAndAnswer)”进行检查,并查看它分支的方式。
致管理员:顺便说一句,我想先发布这个作为评论,因为我上次使用答案时被标记,但我没有看到任何选项来添加评论,只有答案。
答案 1 :(得分:0)
通过对此问题进行一些研究,很明显应该在迁移种子逻辑之外创建用户种子 - 至少现在直到它们更容易实现!
作为解决方法,我遵循此Stackoverflow问题(Best way to incrementally seed data in Entity Framework 4.3)中的示例,手动使我的新用户在迁移配置文件之外启动。
这对我来说并不理想,因为所有“创业”数据都不是在一个领域,但它完成了工作并且并不难以理解。