이전에는 코드 첫 번째를 사용하여 테이블을 만들 때 데이터베이스 초기화 프로그램을 사용하여 테이블을 시드하거나 미리 채 웁니다. 이 모든 것이 효과적 이었지만 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);
}
}
위의 업데이트-데이터베이스를 실행할 때 지금 컴파일하지만 새 사용자가 생성됩니다. 누구든지 시도해볼 제안이 있다면 그것은 좋을 것입니다!
감사합니다,
리치
의견에 감사드립니다. 관련성이 있는지 여부는 확실하지 않지만 Altairis Security Toolkit을 사용하여 기본 회원 테이블 대신 사용자 테이블을 사용할 수 있습니다. requireQuestionAndAnswer = "false"가 web.config에도 설정되어 있으므로 약간 혼란 스럽습니다. –