2014-09-24 5 views
0

Asp.net mvc 5 Identity 2.0은 mvc 프로젝트를 실행할 때 자동으로 5 개의 테이블을 생성합니다.Asp.net mvc5 Identity?

여기 내 질문에 AspnetUser와 같은 일부 테이블은 'Id'유형의 문자열로 정의되어 있습니다.

문자열은 GUID와 비슷하지만 문자열을 사용하는 대신 GUID 유형을 정의하지 않는 이유는 무엇입니까?

문자열에서 데이터 형식을 전송하거나 데이터를 쿼리 할 때 어떤 작업을 수행합니까?

문자열로 정의하는 이유를 알아낼 수 없지만 guid처럼 보이십니까?

다른 테이블은 AspnetRole과 같은 문제가 있으며 'UserId', 'RoleId'항목도 문자열로 정의되어 있습니다.

의견이 있으십니까?

답변

1

나는 이것이 다른 이유가 있다고 생각합니다.

데이터의 양 (클러스터 된 인덱스) 후에 느려지고 느려질 Guids의 삽입 성능이 한 가지 이유입니다.

또 다른 이유는 다른 데이터베이스에서 Guid를 처리하는 차이입니다. Microsoft SQL Server는 Guid 인 UniqueIdentifier 유형을 가지고 있으며, MySql은이를 문자열로 저장하고, Oracle은 Guid의 원시 바이트를 저장합니다.

이 부분이 사용자의 전체적인 부분을 설명하기를 바랍니다. ..

+1

따라서 GUID의 성능이 String보다 나쁩니 까? – cnz81

+0

나는 100 % 윤곽을 나타내지는 않았지만, 동료가있다. 나는 그를 확신한다. 그러나 그것이 내가 말했듯이 분명히 유일한 이유는 아닙니다. –

0

Identity 프레임 워크는 지정된 필드 나 데이터 유형을 사용하여 데이터베이스 테이블을 생성하는 코드 첫 번째 방법을 위해 만들어지지 않았습니다. Identity 프레임 워크는 기존 데이터베이스에 대해 사용하거나 이전 asp.net 멤버 자격 공급자를 마이그레이션하거나 별도의 데이터베이스 필드에 자체 테이블 이름을 사용하여 ID 테이블에 더 많은 데이터를 저장할 수 있습니다.

더 많은 경우, 요구 사항에 따라이 필드에 Guid, 정수, Long 등을 사용할 수 있기 때문에 문자열로 사용되는 aspnetUser 테이블의 ID (사용자 테이블)가 더 있습니다.

예. : 정수를 aspnetUser 테이블 (사용자 테이블)의 ID로 사용하기로 결정한 경우 데이터베이스 필드는 자동 증가 int (또는 bigInt 등) 필드가됩니다. 그러나 엔터티 프레임 워크 마이그레이션 요구 사항을 충족시키기 위해 모델 바인딩을 수행해야합니다.

기본적으로 상자 asp.net Identity 프레임 워크를 사용할 때이 필드에 Guid가 삽입됩니다.

등록 된 사용자에 대한 역할을 정의하면 AspnetRole 테이블에 레코드가 추가됩니다. 이는 이전에 설명한대로 테이블에 정의한 필드에 완전히 의존합니다. aspnetUser 테이블의 ID로 정수를 사용하기로 결정한 경우 AspnetRser 테이블 필드는 aspnetUser 테이블 필드와의 관계에 따라 업데이트됩니다.

희망이 도움이됩니다.

+0

제 질문의 요점은 왜 그들은 기본적으로 String을 사용합니까? 내 요구 사항에 따라 유형을 전환 할 수 있지만 시스템이 기본적으로 GUID 또는 Int 대신 String을 설정하는 이유는 무엇입니까? – cnz81

관련 문제