Как я могу создать учетную запись пользователя в моей таблице User, используя Entity Framework Migrations? - PullRequest
0 голосов
/ 17 февраля 2012

Ранее я использовал инициализатор базы данных для заполнения или предварительного заполнения моих таблиц при их создании с использованием 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

Ответы [ 2 ]

0 голосов
/ 21 февраля 2012

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

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

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

0 голосов
/ 17 февраля 2012

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

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

...