inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

Razor Pages 멤버십 서비스 초급과정(.NET5)

Migration 작업

update-database 에러

496

Justin

작성한 질문수 4

0

안녕하세요. 지난번 주신 답변도 감사합니다.  Migration 중에 에러가 났는데, 도움 부탁드립니다. 우선 상황을 설명드리면

1) .net Core 3.1 / Azure Web App / VS 2019 구요, 

2) 이 강의를 접하기 전에 이미 Identity 폴더에 스캐폴딩을 한 상태

3) add-migration 까지는 잘 됐으나 update-database 중 오류 발생

4) DB에서 확인해 보면 AspNetUserClaims, AspNetUsers 등 7개의 테이블 생성되어 있음 

코드도 GitHub에서 복붙이라 오타는 없을 거 같은데...(빌드 잘됨) 무엇이 문제인지, 어떻게 해결할 수 있는지 도움 부탁드립니다. 

감사합니다 !!!

에러 메시지

fail: Microsoft.EntityFrameworkCore.Database.Command[20102]

      Failed executing DbCommand (162ms) [Parameters=[], CommandType='Text', CommandTimeout='30']

      ALTER TABLE [MemberClaim] ADD CONSTRAINT [FK_MemberClaim_AspNetUsers_UserId] FOREIGN KEY ([UserId]) REFERENCES [AspNetUsers] ([Id]) ON DELETE CASCADE;

Failed executing DbCommand (162ms) [Parameters=[], CommandType='Text', CommandTimeout='30']

ALTER TABLE [MemberClaim] ADD CONSTRAINT [FK_MemberClaim_AspNetUsers_UserId] FOREIGN KEY ([UserId]) REFERENCES [AspNetUsers] ([Id]) ON DELETE CASCADE;

Microsoft.Data.SqlClient.SqlException (0x80131904): Column 'AspNetUsers.Id' is not the same data type as referencing column 'MemberClaim.UserId' in foreign key 'FK_MemberClaim_AspNetUsers_UserId'.

Could not create constraint or index. See previous errors.

   at Microsoft.Data.SqlClient.SqlConnection.OnError(SqlException exception, Boolean breakConnection, Action`1 wrapCloseInAction)

   at Microsoft.Data.SqlClient.SqlInternalConnection.OnError(SqlException exception, Boolean breakConnection, Action`1 wrapCloseInAction)

   at Microsoft.Data.SqlClient.TdsParser.ThrowExceptionAndWarning(TdsParserStateObject stateObj, Boolean callerHasConnectionLock, Boolean asyncClose)

   at Microsoft.Data.SqlClient.TdsParser.TryRun(RunBehavior runBehavior, SqlCommand cmdHandler, SqlDataReader dataStream, BulkCopySimpleResultSet bulkCopyHandler, TdsParserStateObject stateObj, Boolean& dataReady)

   at Microsoft.Data.SqlClient.SqlCommand.RunExecuteNonQueryTds(String methodName, Boolean isAsync, Int32 timeout, Boolean asyncWrite)

   at Microsoft.Data.SqlClient.SqlCommand.InternalExecuteNonQuery(TaskCompletionSource`1 completion, Boolean sendToPipe, Int32 timeout, Boolean& usedCache, Boolean asyncWrite, Boolean inRetry, String methodName)

   at Microsoft.Data.SqlClient.SqlCommand.ExecuteNonQuery()

   at Microsoft.EntityFrameworkCore.Storage.RelationalCommand.ExecuteNonQuery(RelationalCommandParameterObject parameterObject)

   at Microsoft.EntityFrameworkCore.Migrations.MigrationCommand.ExecuteNonQuery(IRelationalConnection connection, IReadOnlyDictionary`2 parameterValues)

   at Microsoft.EntityFrameworkCore.Migrations.Internal.MigrationCommandExecutor.ExecuteNonQuery(IEnumerable`1 migrationCommands, IRelationalConnection connection)

   at Microsoft.EntityFrameworkCore.Migrations.Internal.Migrator.Migrate(String targetMigration)

   at Microsoft.EntityFrameworkCore.Design.Internal.MigrationsOperations.UpdateDatabase(String targetMigration, String contextType)

   at Microsoft.EntityFrameworkCore.Design.OperationExecutor.UpdateDatabaseImpl(String targetMigration, String contextType)

   at Microsoft.EntityFrameworkCore.Design.OperationExecutor.UpdateDatabase.<>c__DisplayClass0_0.<.ctor>b__0()

   at Microsoft.EntityFrameworkCore.Design.OperationExecutor.OperationBase.Execute(Action action)

ClientConnectionId:5d19c800-22e0-4007-920e-9450a07f3836

Error Number:1778,State:0,Class:16

Column 'AspNetUsers.Id' is not the same data type as referencing column 'MemberClaim.UserId' in foreign key 'FK_MemberClaim_AspNetUsers_UserId'.

Could not create constraint or index. See previous errors.

.NET

답변 5

1

김정수

잘 되셨다니 다행입니다.

진행하다가 막히면 또 문의해 주세요.

추위에 건강 유의하세요.

0

Justin

강사님 해결됐습니다. GitHub 코드랑 제걸 하나하나 비교하다 보니,  ApplicationDbContext 상단에 IdentityDbContext<ApplicationUser, ApplicationRole, string> 를 빼 먹고 그냥 IdentityDbContext 로만 되어 있었더라구요, string 을 받아오지 않아서 에러가 났던거 같아요. 감사합니다 !!! 이제 이후 강의 따라하러 가 볼게요~ 좋은 하루 되세요.

0

김정수

서면으로는 더 이상 해결이

어려울 듯 싶습니다.

먼저, 대화가능한 시간대를 알려주세요. (예: 저녁 9시)

그 때, 서면 대신 원격접속으로 도와드리겠습니다.

팀뷰어 먼저 설치하고 실행하신 후에 말씀해 주세요.

팀뷰어는 https://www.teamviewer.com/ko/에서

다운로드 받으시면 됩니다.

설치할 때는 개인목적으로 설치 2번째 항목을 선택해서

설치해 주세요. (상업적으로 사용하면 유료입니다.)

0

Justin

강사님 안녕하세요. 

말씀해 주신대로 (1) Database에서 AspNet 으로 시작하는 모든 테이블과 __EFMigration~ 테이블까지 모두 지우고 (2) VS에서 Migrations 폴더를 지운 후에 (3) Add-Migration 까지는 정상적으로 진행됐습니다.  그리고 (4) update-database 를 하자 동일한 에러가 아래와 같이 나옵니다.  참고로 GitHub 에 있는 모든 코드를 그대로 가져 온 것이 아니라 현재 ApplicationUser, ApplicationRole, ApplicationDbContext 만 코딩을 한 상태입니다. Migration까지 잘 되면 SeedSite 를 하려고 했거든요. 

그럼 한번 만 더 살펴봐 주세요. 감사합니다 !!!!

Failed executing DbCommand (18ms) [Parameters=[], CommandType='Text', CommandTimeout='30']

CREATE TABLE [MemberClaim] (

    [UserSeq] int NOT NULL IDENTITY,

    [UserId] varchar(50) NOT NULL,

    [ClaimType] varchar(100) NULL,

    [ClaimValue] nvarchar(100) NULL,

    CONSTRAINT [PK_MemberClaim] PRIMARY KEY ([UserSeq]),

    CONSTRAINT [FK_MemberClaim_AspNetUsers_UserId] FOREIGN KEY ([UserId]) REFERENCES [AspNetUsers] ([Id]) ON DELETE CASCADE,

    CONSTRAINT [FK_MemberClaim_Member_UserId] FOREIGN KEY ([UserId]) REFERENCES [Member] ([UserId]) ON DELETE CASCADE

Microsoft.Data.SqlClient.SqlException (0x80131904): Column 'AspNetUsers.Id' is not the same data type as referencing column 'MemberClaim.UserId' in foreign key 'FK_MemberClaim_AspNetUsers_UserId'.

Could not create constraint or index. See previous errors.

Column 'AspNetUsers.Id' is not the same data type as referencing column 'MemberClaim.UserId' in foreign key 'FK_MemberClaim_AspNetUsers_UserId'.

Could not create constraint or index. See previous errors.

0

김정수

① 먼저, 열강해 주셔서 감사합니다.

Justin님께서 언급하신 대로,

이미 Identity 폴더에 스캐폴딩을 한 상태일 경우에

데이터베이스에 이미 만들어진 모든 테이블을 삭제하는

방법 밖에 없습니다.

② 문의하신 에러 메시지를 보면, 아래 문구가 눈에 띕니다.

-----------------------------------------------------

Column 'AspNetUsers.Id' is not the same data type

as referencing column 'MemberClaim.UserId'

in foreign key 'FK_MemberClaim_AspNetUsers_UserId'.

-----------------------------------------------------

③ 에러를 살펴보면,

AspNetUsers 테이블의 Id는 nvarchar(450) 데이터 타입이고

MemberClaim 테이블의 UserId는 varchar(50) 데이터 타입이라

Foreign Key(FK)로 연결할 수 없어서 에러가 난 것입니다.

④ 다음의 표에서 데이터 타입이 다른 것을 확인하실 수 있습니다.

--------------------------------------------------------

커스터마이징 전             |     커스터마이징 후

AspNetUsers : Id                 Member : UserId

             nvarchar(450)                varchar(50)

AspNetUserClaims : UserId        MemberClaim : UserId

             nvarchar(450)                varchar(50)

--------------------------------------------------------

⑤ 위의 표를 보면서, 어떻게 커스터마이징 전과 후의 테이블들로

연결이 될 수 있는지 의아할 수 있습니다만,

위에 나온 것은 클래스를 마이그레이션해서 생성되는 테이블명이

다를 뿐입니다. 클래스를 살펴보면,

IdentityUserClaim과 ApplicationUser가

Foreign Key(FK)로 연결되어 있습니다.

(커스터마이징을 하지 않아도 두 클래스는 FK로 연결된 테이블 두 개를

생성하는 것이죠. 내부적으로요.)

설명이 좀 길었는데, 이해가 되셨는지요?

⑥ 이제 해결해야 할 시간입니다.

해결방법은 간단합니다.

먼저, 데이터베이스에서 AspNet 접두어로 된 7개의 테이블을 수동으로 삭제하세요.

(__EFMigrationsHistory 테이블도 같이 삭제하세요.)

그리고 NetCore.Web 프로젝트에서

"/Data/Migrations/20200730031805_SeedSiteRole.cs" 파일을 삭제해 주세요.

그냥 삭제하지 마시고, 반드시 Package Manager Console 창에서

remove-migration 명령어를 통해 삭제하셔야 합니다.

그 다음에 update-database를 하시면,

20200724043036_Create_Identity.cs 내용이 데이터베이스에 적용됩니다.

마지막으로 SeedSiteRole.cs 또한 데이터베이스에 적용해야

멤버십 서비스가 이상없이 잘 동작하겠죠?

이렇게 하시면 문제없이 해결이 잘 되실 것입니다.

⑦ 또 문제가 발생하면 언제든지 질문해 주시고, 즐강하세요.

블레이저 서버와 웹어셈블리

0

1269

1

두번째 강의 의존성주입에서 startup 클래스가 없습니다.

0

701

2

Login 뷰에서 MembershipController연결 방식문의

0

370

1

14일만에 배우는 ASP.NET CORE 질문

1

411

1

안녕하세요 강사님.

0

375

2

안녕하세요.

0

355

1

blazor server 에서의 token auth 진행 과정

1

992

1

button click에 연결한 함수 실행시, 다른 태그에 연결한 동일 함수가 실행되는 이유.

0

465

1

질문이 있습니다.

0

331

1

OnConnected != null

0

259

1

AccessFailedCount 추가 시 NULL값 문제

0

424

1

3강에서

0

221

1

IAsyncResult를 쓰는 이유

0

653

1

BeginIvoke

0

385

1

델리게이트 관련

0

274

1

재질문

1

312

1

이메일 전송 문제

0

248

1

SendGrid API에 관하여.

0

385

1

깃허브 문의입니다.

0

214

1

Guid에 관하여

0

308

3

개인 연락처

0

213

1

폴더/페이지 접근 권한 관리

0

501

3

클레임과 실제 적용 방법 문의

0

261

3

이미 스캐폴딩을 한 경우에 강의 코드들을 적용하고 마이그레이션 하면 어떻게 될까요?

0

257

3