2013-07-27 2 views
0

좋아요, 그럼 SimpleMembership을 설정했는데 데이터베이스를 설정하려면 WebSecurity.InitializeDatabaseConnection(...)을 한 번만 실행해야한다는 인상하에있었습니다. 나중에 사용자 ID를 찾으려고 할 때 WebSecurity를 ​​호출하기 전에 데이터베이스를 초기화해야한다는 오류가 표시됩니다. Ok ... 그래서 초기화 된 콜백을 _ViewStart.cshtml에 다시 넣습니다. 지금 나는 다시 달리고 나는 과실을 The "WebSecurity.InitializeDatabaseConnection" method can be called only once. 얻는다 그래서 나는 그렇지 않으면 저주하면된다.간단한 멤버십을 위해 데이터베이스를 초기화해야합니까? MVC 모순?

누군가가 설명해 주시겠습니까?

답변

1

에 대한 호출에 포장해야하는 이유입니다 :)

+0

왜 내가 _ViewStart에 넣으려고한다고 생각하는지 기억이 안납니다. 나는 그것을 App_Start의 파일로 옮겼고 더 이상 문제가없는 것 같습니다. – Sinaesthetic

+0

그래, 글쎄, 그 파일들은 (당신이'Global.asax' 파일의'Application_Start'에서 초기화되고있는 한) 작동 할 것입니다. 나는 단지'DatabaseConfig' 클래스를 만들었습니다. 하지만 다행 :) – hjavaher

1

예, 실제로는 매우 간단합니다. 일반적으로 초기화를 수행하는 곳보다 간단한 멤버쉽이 필요한 코드를 사용하고 있습니다. 그래서 오류 메시지가 나타나고 초기화 작업을 수행 할 호출을 추가합니다. 이제 새 코드가 작동하지만 이전 코드로 이동하면 데이터베이스가 다시 초기화되고 오류가 발생합니다.

문제는 기본적으로 파이프 라인에서 너무 일찍 데이터에 액세스하려고한다는 것입니다. 초기화는 앱 도메인이 생성 될 때마다 (즉, 앱이 처음 시작될 때 또는 비활성으로 인해 IIS에 의해 앱이 재시작 된 후) 발생해야합니다. 이 도움이

public static void DatabaseInit(string ConnectionName = "DefaultConnection", string userTable = "UserProfile", string userIdColumn = "UserId", string userNameColumn = "UserName", bool autoCreateTable = true) 
    { 
     WebSecurity.InitializeDatabaseConnection(ConnectionName, userTable, userIdColumn, userNameColumn, autoCreateTables: autoCreateTable); 
    } 

희망 :

당신이 아래처럼 DatabaseConfig App_Start\DatabaseConfig.cs 클래스의 DatabaseInit 방법에 WebSecurity.InitializeDatabaseConnection(...)을 배치해야 WebSecurity.Initialized