VS2015에서 EF6을 사용하고 있으며 지금까지 개발 한 많은 성공적인 마이그레이션이있었습니다. 테이블을 변경하여 외래 키를 지정하고 추가 마이그레이션을 실행했습니다. 나는 거기에 기대했던 변화뿐만 아니라 문자열 필드를 가진 많은 기존 테이블도 수정되고 있다는 것을보고 놀랐다.EF6 코드 첫 번째 추가 마이그레이션으로 비정상적인 마이그레이션이 생성되지만 응용 프로그램이 실행됩니다.
외래 키에 대한 변경 사항을 취소했지만 문자열 필드 변경 사항은 아직 마이그레이션에 포함되어 있습니다. 응용 프로그램이 실행되어 데이터베이스와 모델이 동기화 된 것처럼 보이지만 이상한 마이그레이션이 여전히 존재합니다.
표 다음 인터페이스와 클래스의 모든 기반으로 변경되는 :
public interface IModificationHistory
{
DateTime? DateModified { get; set; }
DateTime? DateCreated { get; set; }
string UserName { get; set; }
}
public class ModificationHistory : IModificationHistory
{
[JsonIgnore]
[Display(Name = "Date modified")]
public DateTime? DateModified { get; set; }
[JsonIgnore]
[Display(Name = "Date created")]
public DateTime? DateCreated { get; set; }
[JsonIgnore]
[DataType(DataType.Text), MaxLength(256)]
[Display(Name = "User name")]
public string UserName { get; set; }
}
예는
public class Organisation : ModificationHistory
{
[Key]
public int Id { get; set; }
[Required]
[DataType(DataType.Text), MaxLength(10)]
[Display(Name = "Code")]
public string Code { get; set; }
[Required]
[DataType(DataType.Text), MaxLength(255)]
[Display(Name = "Name")]
public string Name { get; set; }
}
이제 새로운 마이그레이션이 갑자기 문자열 길이를 변경하고자하고 무시한다 MaxLength (256) 특성. 이 상속이 지정된 모든 테이블에서 발생합니다.
은 다음과 같습니다
public override void Up()
{
//snip
AlterColumn("dbo.Organisation", "UserName", c => c.String());
//snip
}
나는 딱하다로 무엇이 발생했습니다 또는 방법을 어떻게 마이그레이션이 이상한 변경을 중지하는 방법 찾기 - 어떤 단서를?
더 흥미로운 정보.
이상한 마이그레이션으로 데이터베이스를 업데이트 한 후 모델 오류가 발생하여 앱이 실행되지 않는 것으로 나타났습니다. Username 필드에서 MaxLength 속성을 제거해야만 OK였습니다.
MaxLength를 사용하여 속성을 다시 추가해도 아무 것도없는 새로운 마이그레이션이 생성되지 않았습니다.이 속성은 무시되지만이 클래스에서 상속 된 테이블에서만 나타납니다.
분명히 내가 이런 일이 일어나도록 변화 시켰지만, Git에게 커밋을하고 변경된 파일을 잘 보면서 여전히 단서를 얻지 못했습니다.
'Down'메소드는 무엇을 생성합니까? –
길이 제한을 다시 설정합니다. AlterColumn ("dbo.Organisation", "UserName", c => c.String (maxLength : 256)); – OzTrak
확실히 이상하고 깨끗한 테스트로 재현 할 수 없습니다. 여기에 표시되지 않은 특수 코드 - 인터페이스를 기반으로 일반적인 유창 구성을 수행하는 'OnModelCreating'등. 다른 원인이 있어야합니다. –