Как я могу создать учетную запись пользователя в моей таблице User, используя Entity Framework Migrations?

Ранее я использовал инициализатор базы данных для заполнения или предварительного заполнения моих таблиц при их создании с использованием 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, но новый пользователь не генерируется. Если у кого-то есть предложения, попробуйте это было бы здорово!

Спасибо,

Богатые

2 ответа

Решение

Проведя некоторые исследования по этой проблеме, стало очевидным, что пользовательское заполнение должно создаваться вне логики начального этапа миграции - по крайней мере, пока, пока это не станет проще!

В качестве обходного пути я последовал примеру из этого вопроса Stackru ( Лучший способ пошагового заполнения данных в Entity Framework 4.3), чтобы вручную запустить моего нового пользователя вне файла конфигурации миграции.

Это не идеально, по крайней мере для меня, поскольку все данные о запуске не находятся в одной области, но они выполняют свою работу и не так сложны для отслеживания.

Я думаю, что ваше членство требует вопросов и ответов. Пытались ли вы поставить проверку с помощью "if (Membership.RequiresQuestionAndAnswer)" и посмотреть, как он разветвляется.

Для администратора: Кстати, я хотел сначала опубликовать это как комментарий, так как в прошлый раз меня пометили при использовании ответа, но я не вижу здесь никакой возможности для добавления комментариев, только ответы.

Другие вопросы по тегам