Ранее я использовал инициализатор базы данных для заполнения или предварительного заполнения моих таблиц при их создании с использованием Code First.Все это прекрасно работало, но я хотел перейти к использованию миграций EF 4.3.
Я обновил до EF 4.3 в своем проекте, удалил код инициализатора базы данных и поместил его в метод Seed в миграциях Configuration.cs.файл.Это все работает хорошо для меня для предварительной заполнения моих таблиц, за исключением случаев, когда я хочу вставить пользователя по умолчанию в мою таблицу пользователей.
Я использую следующий код в моем методе 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, но новый пользователь не генерируется.Если у кого-то есть предложения попробовать, было бы здорово!
Спасибо,
Rich