2015-01-23 6 views
5

내가 EF 6.0 코드 먼저 사용하고, 나는이 엔터티가 :엔티티 프레임 워크 변경 기본 키를 입력

public class TrainingRespect 
{ 
    [Key] 
    public int RespectId { get; set; } 

    public DateTime? DateWhenRespected { get; set; } 

    #region 

    public string UserId { get; set; } 
    public User User { get; set; } 

    public Guid TrainingId { get; set; } 
    public Trening Training { get; set; } 

    #endregion 
} 

을 그리고 나는 그것이 GUID로 INT에서 기본 키 (RespectId을)의 변경하려면/문자열/긴.

가장 쉬운 방법은 무엇입니까? 유형 만 변경하면 EF 마이그레이션이 모든 것을 처리하거나 다른 방법으로 수행해야합니까?

+0

당신이 할 수있는 일에 대한 아이디어가있는 것 같습니다. 너 해봤 어? 대답은 '예'여야합니다. – JamesT

+0

@JTolley 아니요. 99 % 응답이 "아니오"여야했기 때문에 아니오. 이전 버전의 EF로 인해 나쁜 경험이있었습니다. 어쨌든 귀하의 의견을 읽은 후 int에서 long 및 string으로 변경하려고 시도했는데이 오류가 발생했습니다 : '클러스터 된 인덱스가없는 테이블은이 버전의 SQL Server에서 지원되지 않습니다. 클러스터 된 색인을 생성하고 다시 시도하십시오. 제약 조건을 삭제할 수 없습니다. 이전 오류를 참조하십시오. 문이 종료되었습니다. ' – hyperN

+0

어떤 버전의 SQL Server를 사용하고 있습니까? – JamesT

답변

2

실제로 질문에 답 하시겠습니까? 데이터 유형 만 변경하면 마이그레이션에서 처리해야합니다.

귀하의 의견을 토대로이 마이그레이션을 적용하는 데 문제가 있습니다. 이것은 위의 내용을 부정하지 않지만 약간의 추측을 사용하는 데 도움을줍니다.

Sql Azure를 사용하는 경우 모든 테이블에서 클러스터 된 인덱스가 있어야합니다. EF6는 문자열 키에서도 클러스터형 인덱스를 생성해야합니다. 알파 3이있는 버그가 있지만 마이그레이션 테이블에 클러스터 된 키를 만들지 않습니다.

http://entityframework.codeplex.com/discussions/435723

는 설명과 해결 방법은 위의 링크를 참조하십시오. 문제가 지속될 경우

, 당신은 패키지 콘솔에서 다음 명령을 실행할 수 있습니다

Update-Database -Script 

이 직접 업데이트하려고 대신 SQL 스크립트를 생성합니다. 이 테이블을보고 Create Table 문에 클러스터형 인덱스가 없는지 확인합니다.

경우에 따라서는 그렇지 않습니다. 마이그레이션의 CreateTable 문을 명시 적으로 수정하여 기본 키가 클러스터되도록 만들 수 있습니다.

CreateTable("MyTable", 
    c => new { 
     Id = c.String(nullable: false, maxLength: 128) 
    }) 
.PrimaryKey(t => t.Id, null, true); 

주목할 가치 : GUID를 끔찍 클러스터 된 인덱스을합니다. GUID 키를 사용하고 옵션이있는 경우 대신 클러스터링하지 말고 다른 클러스터형 인덱스를 사용하십시오.

+2

정보 : Azure의 V12 미리보기 버전은 클러스터 된 인덱스가없는 테이블을 허용합니다. http://azure.microsoft.com/en-gb/documentation/articles/sql-database-preview-whats-new/ – Colin

+0

피곤했습니다. 알파 3 버그 수정, 이제 V12로 업데이트하고 무슨 일이 일어나는지 보려고합니다. 스크립트 옵션을 사용해 보겠습니다. 해답을 찾아 주셔서 감사합니다. – hyperN

관련 문제