새로운 .NET 웹 응용 프로그램 프로젝트를 만들고 선택한 템플릿에 대한 개별 사용자 계정 인증을 선택했습니다. 기본적으로 App_Data 디렉토리에 로컬 데이터베이스로 Identity 데이터베이스를 설정합니다. 이것은 잘 동작했다. 그렇지만 내 응용 프로그램의 나머지 부분을 보유하고있는 실제 SQL Server 데이터베이스에 멤버쉽을위한 AspNet 테이블이 필요했습니다. 그래서 로컬 SQL Server 데이터베이스를 가리 키도록 DefaultConnection 문자열을 변경했습니다. 응용 프로그램을 다시 배포하면 EF가 실제 데이터베이스에서 해당 테이블을 자동으로 작성했습니다. 그래서 모든 것이 좋게 보였다..NET ID UserManager.FindAsyc throwing " 'Discriminator'열 이름이 잘못되었습니다."
로그인하려고 할 때 UserManager.FindAsync를 호출하면 다음과 같은 SqlException이 발생합니다. "잘못된 식별자 ''.". " 전체 StackTrace는 아래를 참조하십시오.
기본 웹 응용 프로그램 템플릿과 함께 제공되는 동일한 ApplicationDbContext 및 ApplicationUser를 사용하고 있습니다.
내가 뭘 잘못하고 있는지에 대한 아이디어가 있습니까? 이것은 .NET Identity로 작업 한 첫 번째 시간입니다. 연결 문자열을 변경하는 것 외에도 기존 SQL Server 데이터베이스와 작동하도록하는 다른 방법이 있습니까?
감사합니다.
전체 스택 추적 :
at System.Data.SqlClient.SqlConnection.OnError(SqlException exception, Boolean breakConnection, Action`1 wrapCloseInAction)\r\n at System.Data.SqlClient.SqlInternalConnection.OnError(SqlException exception, Boolean breakConnection, Action`1 wrapCloseInAction)\r\n at System.Data.SqlClient.TdsParser.ThrowExceptionAndWarning(TdsParserStateObject stateObj, Boolean callerHasConnectionLock, Boolean asyncClose)\r\n at System.Data.SqlClient.TdsParser.TryRun(RunBehavior runBehavior, SqlCommand cmdHandler, SqlDataReader dataStream, BulkCopySimpleResultSet bulkCopyHandler, TdsParserStateObject stateObj, Boolean& dataReady)\r\n at System.Data.SqlClient.SqlDataReader.TryConsumeMetaData()\r\n at System.Data.SqlClient.SqlDataReader.get_MetaData()\r\n at System.Data.SqlClient.SqlCommand.FinishExecuteReader(SqlDataReader ds, RunBehavior runBehavior, String resetOptionsString)\r\n at System.Data.SqlClient.SqlCommand.RunExecuteReaderTds(CommandBehavior cmdBehavior, RunBehavior runBehavior, Boolean returnStream, Boolean async, Int32 timeout, Task& task, Boolean asyncWrite, SqlDataReader ds)\r\n at System.Data.SqlClient.SqlCommand.RunExecuteReader(CommandBehavior cmdBehavior, RunBehavior runBehavior, Boolean returnStream, String method, TaskCompletionSource`1 completion, Int32 timeout, Task& task, Boolean asyncWrite)\r\n at System.Data.SqlClient.SqlCommand.RunExecuteReader(CommandBehavior cmdBehavior, RunBehavior runBehavior, Boolean returnStream, String method)\r\n at System.Data.SqlClient.SqlCommand.ExecuteReader(CommandBehavior behavior, String method)\r\n at System.Data.SqlClient.SqlCommand.ExecuteDbDataReader(CommandBehavior behavior)\r\n at System.Data.Common.DbCommand.ExecuteReader(CommandBehavior behavior)\r\n at System.Data.Entity.Infrastructure.Interception.DbCommandDispatcher.<>c__DisplayClassb.<Reader>b__8()\r\n at System.Data.Entity.Infrastructure.Interception.InternalDispatcher`1.Dispatch[TInterceptionContext,TResult](Func`1 operation, TInterceptionContext interceptionContext, Action`1 executing, Action`1 executed)\r\n at System.Data.Entity.Infrastructure.Interception.DbCommandDispatcher.Reader(DbCommand command, DbCommandInterceptionContext interceptionContext)\r\n at System.Data.Entity.Internal.InterceptableDbCommand.ExecuteDbDataReader(CommandBehavior behavior)\r\n at System.Data.Common.DbCommand.ExecuteReader(CommandBehavior behavior)\r\n at System.Data.Entity.Core.EntityClient.Internal.EntityCommandDefinition.ExecuteStoreCommands(EntityCommand entityCommand, CommandBehavior behavior)
일단 내가 AspNet ... 테이블을 삭제하고 다시 응용 프로그램을 실행하면 테이블이 다시 재생되어 정상적으로 작동합니다. 다시 생각해 보면, 내가 처음 실행 한 데이터베이스 테이블을 만든 동일한 솔루션 내에서 별도의 웹 프로젝트를 만든 다음 다른 웹 프로젝트에서 동일한 테이블과 연결 문자열을 사용해 보았을 가능성이 있습니다. 그것이 왜 문제를 일으켰을 지 확신 할 수 없지만, 그것을 지우고 다시 시작하는 것은 효과가있는 것으로 보입니다. 당신의 도움을 주셔서 감사합니다. –