2012-02-17 5 views
0

이전에는 코드 첫 번째를 사용하여 테이블을 만들 때 데이터베이스 초기화 프로그램을 사용하여 테이블을 시드하거나 미리 채 웁니다. 이 모든 것이 효과적 이었지만 EF 4.3 마이그레이션을 계속 사용하고자했습니다.Entity Framework 마이그레이션을 사용하여 사용자 테이블에 사용자 계정을 만들려면 어떻게해야합니까?

내 프로젝트에서 EF 4.3으로 업데이트되었고 데이터베이스 초기화 코드를 제거하고 마이그레이션 Configuration.cs 파일의 Seed 메서드 내에 넣었습니다. 이것은 내 사용자 테이블에 기본 사용자를 시드하려는 경우를 제외하고 내 테이블을 미리 채우는 데 모두 정상적으로 작동합니다.

 // create default User 
     MembershipCreateStatus status = new MembershipCreateStatus(); 
     User admin = context.Users.Find("TestGuy"); 
     if (admin == null) 
     { 
      Membership.CreateUser("TestGuy", "TestGuy123", "[email protected]"); 
      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); 
      } 
     } 

- (따라서 이름 확인 현재이 내가이 상황에 그것을 사용하는 방법을 잘 모르겠어요으로 AddOrUpdate 코드를 사용하지 않습니다) :

나는 내 종자 방법 내에서 다음 코드를 사용하여 나는 시도하고 업데이트-데이터베이스를 실행하면이 오류를 얻을 :

The password-answer supplied is invalid. 

나는이 그냥 아래로 나는 createuser가 전화를하지만 난이 버그를 해결하는 방법을 알아 작동하지 수있는 방법을 생각합니다. 보안 질문과 대답에 null을 넣으려고했지만 작동하지 않는 것 같습니다.

누구나 'AddOrUpdate'옵션을 사용하여 사용자를 시드하는 예가 있습니까?

편집 1 : 아래의 코멘트 하나, 내 구성원을 관리 할 수 ​​Altairis 보안 툴킷을 사용하고 당으로

. 다음과 같이 내 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", "[email protected]", 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); 
      } 
     } 

위의 업데이트-데이터베이스를 실행할 때 지금 컴파일하지만 새 사용자가 생성됩니다. 누구든지 시도해볼 제안이 있다면 그것은 좋을 것입니다!

감사합니다,

리치

답변

0

이 문제에 대한 조사를 한 결과 사용자 시딩을 마이그레이션 시드 논리 외부에서 만들어야한다는 사실이 드러났습니다.

나는 주위에 작업으로이 Stackoverflow 질문 (Best way to incrementally seed data in Entity Framework 4.3) 수동으로 마이 그 레이션 구성 파일 외부에서 시작하면 내 새 사용자를 만들 수 있습니다.

모든 '시작'데이터가 하나의 영역에 없지만 그 작업이 완료되고 따르기가 어렵지 않기 때문에 적어도 나에게는 이상적이지 않습니다.

0

나는 당신의 회원이 질문과 대답을 요구하도록 설정되어 생각합니다. "if (Membership.RequiresQuestionAndAnswer)"를 사용하여 체크인을 시도하고 어떤 방식으로 분기하는지보십시오.

관리자에게 : 지난번에 답변을 사용할 때 플래그가 지정되었으므로 처음에는 댓글로 게시하고 싶었지만 댓글을 추가 할 때는 여기에 옵션이 표시되지 않고 답변 만 표시됩니다.

+0

의견에 감사드립니다. 관련성이 있는지 여부는 확실하지 않지만 Altairis Security Toolkit을 사용하여 기본 회원 테이블 대신 사용자 테이블을 사용할 수 있습니다. requireQuestionAndAnswer = "false"가 web.config에도 설정되어 있으므로 약간 혼란 스럽습니다. –