2012-11-22 4 views
3

내가 SQL이 SimpleMembership를 사용하여 작업과 MVC4 사이트를 얻으려고하지만 사용자 레코드를 만들 때마다 나는 오류가 계속 : 나에게 그래서SimpleMembership 제공자가 할당되지 ID의

[SqlException (0x80131904): Cannot insert the value NULL into column 'Id', table 'NFBC.dbo.User'; column does not allow nulls. INSERT fails. 
The statement has been terminated.] 
    System.Data.SqlClient.SqlConnection.OnError(SqlException exception, Boolean breakConnection, Action`1 wrapCloseInAction) +1753346 
    System.Data.SqlClient.SqlInternalConnection.OnError(SqlException exception, Boolean breakConnection, Action`1 wrapCloseInAction) +5295154 
    System.Data.SqlClient.TdsParser.ThrowExceptionAndWarning(TdsParserStateObject stateObj, Boolean callerHasConnectionLock, Boolean asyncClose) +242 
    System.Data.SqlClient.TdsParser.TryRun(RunBehavior runBehavior, SqlCommand cmdHandler, SqlDataReader dataStream, BulkCopySimpleResultSet bulkCopyHandler, TdsParserStateObject stateObj, Boolean& dataReady) +1682 
    System.Data.SqlClient.SqlCommand.FinishExecuteReader(SqlDataReader ds, RunBehavior runBehavior, String resetOptionsString) +269 
    System.Data.SqlClient.SqlCommand.RunExecuteReaderTds(CommandBehavior cmdBehavior, RunBehavior runBehavior, Boolean returnStream, Boolean async, Int32 timeout, Task& task, Boolean asyncWrite) +1325 
    System.Data.SqlClient.SqlCommand.RunExecuteReader(CommandBehavior cmdBehavior, RunBehavior runBehavior, Boolean returnStream, String method, TaskCompletionSource`1 completion, Int32 timeout, Task& task, Boolean asyncWrite) +175 
    System.Data.SqlClient.SqlCommand.InternalExecuteNonQuery(TaskCompletionSource`1 completion, String methodName, Boolean sendToPipe, Int32 timeout, Boolean asyncWrite) +205 
    System.Data.SqlClient.SqlCommand.ExecuteNonQuery() +160 
    WebMatrix.Data.Database.Execute(String commandText, Object[] args) +116 
    WebMatrix.WebData.DatabaseWrapper.Execute(String commandText, Object[] parameters) +55 
    WebMatrix.WebData.SimpleMembershipProvider.CreateUserRow(IDatabase db, String userName, IDictionary`2 values) +1074 
    WebMatrix.WebData.SimpleMembershipProvider.CreateUserAndAccount(String userName, String password, Boolean requireConfirmation, IDictionary`2 values) +102 
    WebMatrix.WebData.WebSecurity.CreateUserAndAccount(String userName, String password, Object propertyValues, Boolean requireConfirmationToken) +127 
    NFBC.Controllers.AccountController.Register(RegisterModel model) in e:\PROJECTS\DEVELOPMENT\00-Current\NFBC\NFBC\Controllers\AccountController.cs:74 

을이 그것을 시도하고 있다고 내 사용자 테이블에 행을 삽입하지만 테이블의 기본 키인 "Id"속성을 설정하지 않았습니다. 이 ID는 공급자가 필요로하는 int 열입니다. 코드가 실행되는 방법은 다음과 같습니다.

  WebSecurity.InitializeDatabaseConnection("NFBCEntitiesRaw", "User", "Id", "Email1", autoCreateTables: true); 
      WebSecurity.CreateUserAndAccount(model.UserName, model.Password); 

ID는 int 기본 키 열이고 Id는 사용자 이름 열, nvarchar (255)입니다.

그리고 데이터베이스에 연결 문자열 : 나는 WebSecurity.CreateUserAndAccount, SimpleMembershipProvider.CreateUserAndAccount 및 SimpleMembershipProvider.CreateUserRow의 소스 코드를 검토 한

<add name="NFBCEntitiesRaw" connectionString="data source=localhost;initial catalog=NFBC;integrated security=True;multipleactiveresultsets=True;application name=EntityFramework" providerName="System.Data.SqlClient" /> 

, 그 방법 중 하나에서 어떤 지점에서 수행 소스 코드는 User 레코드에 ID를 할당하여 예외가 발생하는 이유를 확인합니다. 그러나이 메서드는 ID를 지정할 수 없으며이 샘플이 SQLExpress에 대해 실행 중일 때 ID를 올바르게 할당하는 것처럼 보였습니다. 그래서 여기에서 내가 잘못하고 있는지 확실하지 않습니다.

감사합니다.

+0

어쩌면 내가 데이터베이스를 자동으로 값을 증가시키면서 해당 열을 지정하도록되어 있다고 생각되지만 어쨌든 그것을 지정하는 문서에서는 아무 것도 찾을 수 없다. 해결책? –

+0

SQL Server 인스턴스에 연결되어 있습니까? –

+0

예, 전체 SQL Server 인스턴스입니다. ID 기능을 사용해야한다고 생각했습니다. –

답변

5

SQL Server 2008과 같은 본격적인 MS SQL 데이터베이스에 연결한다고 가정하면 자동 증가를 원할 경우 기본 키 필드를 ID 필드로 표시해야합니다. 디자인 모드에서 테이블을 열어야합니다 (서버 관리 Studio 또는 Visual Studio을 마우스 오른쪽 단추로 클릭하고 '디자인'클릭). ID 열을 선택한 다음 속성이 나타날 때까지 Column Properties 창을 스크롤하십시오. IsIdentitytrue으로 변경하고 저장하면 완료됩니다. 그것은 다음과 같아야합니다

enter image description here

HTH를.

+0

네, 그 트릭을 했어. 나는 질문을 제출 한 후에이 작업을 수행해야 할 것으로 의심되지만, SimpleMembership 시스템에서이를 언급하지 않고 요구되는 것이 이상하게 보입니다. 오 잘. 나는이 대답을 upvote하지만 분명히 나는 ​​아직 충분한 평판이 없다. 감사! –

관련 문제