11

이 질문은 여러 가지 맛으로 여러 번 묻습니다. 나는 모든 대답을 끝내고 많은 시간을 불 태웠다. 나는이 일을 할 수없는 것 같습니다.코드 처음 마이 그 레이션 - 엔티티 프레임 워크 - 테이블에 열을 추가 할 수 없습니다.

나는 asp.net mvc Entity Framework, SQL 서버 응용 프로그램에서 작업 해 왔습니다. 나는 이미 기존 데이터베이스, 테이블 등을 가지고 있으며 모든 것이 작동 중이다. 테이블에 새 열을 추가하기 만하면됩니다.

그래서 .. 테이블에 열을 추가 할 수 있도록 모델 클래스에 속성을 추가했습니다. 그러나 성공하지 못했습니다.

그래서 다음 순서로 단계를 수행합니다.

  1. 내 모델 클래스에 필드를 추가하십시오.

    [Required] 
    public string EmailSubject{ get; set; } 
    
  2. 가 그럼 난 패키지 관리자 콘솔에서 다음
  3. Configuration.cs 클래스

  4. 을 포함하는 내 asp.net MVC 프로젝트의 폴더 마이그레이션을 삭제, 나는 성공적 명령을 다음 문제.
    public Configuration() 
    { 
        AutomaticMigrationsEnabled = true; 
    } 
    
  5. 가 그럼 난 패키지 관리자 콘솔에서 다음 명령을 실행하여 다음과 같이
    Enable-Migrations -ContextTypeName AppointmentReminder.Data.ReminderDb -Force 
    
  6. 은 그 때 나는 진정한 속성을 설정합니다. 여기

    Update-Database -Verbose -Force 
    

내 연결 문자열은 내가 원하는 테이블에 새 열을 추가 할 수 없습니다입니다하지만

Data Source=(LocalDb)\v11.0;AttachDbFilename=C:\practice\AppointmentReminder4\AppointmentReminder4\App_Data\aspnet-AppointmentReminder4-20141202060615.mdf;Initial Catalog=aspnet-AppointmentReminder4-20141202060615;Integrated Security=True 

같은 데이터베이스에 연결이 보이는 기본값 것입니다.


편집에 필요한 특성이없는 다음과 위의 모든 단계를 실행하지만 난 여전히 테이블에 열을 추가 할 수 없습니다 나는 모델을 업데이트 한

.

public string EmailBody { get; set; } 

다음은 모든 명령과 출력입니다. 2

PM> Enable-Migrations -ContextTypeName AppointmentReminder.Data.ReminderDb -Force 
Checking if the context targets an existing database... 
Code First Migrations enabled for project AppointmentReminder4. 
PM> Update-Database -Verbose -Force 
Using StartUp project 'AppointmentReminder4'. 
Using NuGet project 'AppointmentReminder4'. 
Specify the '-Verbose' flag to view the SQL statements being applied to the target database. 
Target database is: 'aspnet-AppointmentReminder4-20141202060615' (DataSource: (LocalDb)\v11.0, Provider: System.Data.SqlClient, Origin: Configuration). 
No pending explicit migrations. 
Running Seed method. 
PM> Update-Database -Verbose -Force 
Using StartUp project 'AppointmentReminder4'. 
Using NuGet project 'AppointmentReminder4'. 
Specify the '-Verbose' flag to view the SQL statements being applied to the target database. 
Target database is: 'aspnet-AppointmentReminder4-20141202060615' (DataSource: (LocalDb)\v11.0, Provider: System.Data.SqlClient, Origin: Configuration). 
No pending explicit migrations. 
Running Seed method. 
PM> 

편집 마지막으로이 문제를 해결. 위의 모든 단계가 정확했습니다. ReminderDb (EF 객체)에 실제로 연결된 실제 데이터 클래스와 달리 모델 클래스를 편집하는 것을 제외하고는. 속성으로 올바른 클래스를 업데이트 한 후에는 모든 것이 성공적으로 수행되었습니다. 도움을 받아 응답 한 모든 사람들에게 감사드립니다!

+0

, 당신은 아마 표시해야합니다 어떤 오류를 알았어. –

답변

11

필드가 필수이므로 기본값을 지정해야합니다. 기본값이 있어야한다 무엇 마이그레이션 파일을 편집하여 열을 추가 라인을 찾아 지정 Default value for Required fields in Entity Framework migrations?

편집 :이 편집을 바탕으로, 당신이 만들 필요가 참고로

public override void Up() 
{  
    AddColumn("dbo.MyTable", "EmailSubject", c => c.String(nullable: false, defaultValue: "")); 
} 

업데이트를 시도하기 전에 마이그레이션하십시오. 일반적으로 사용하는 방법은 this example을 참조하십시오. 기존 데이터베이스에 코드 첫 번째 마이그레이션을 적용하려는 경우

그러나,이 문서가 도움이 될 수 있습니다 : 나는 이미 대답은 내가 생각 대답했습니다 있지만 Code First Migrations with an existing database

+0

은 필수 속성을 제거한 후에도 업데이트되지 않습니다. –

+0

@ dotnet- practitioner You ' 어디에서나 'add-migration'을하지 않으므로 적용 할 항목이 없습니다. 위의 업데이트를 참조하십시오. –

5

필수 속성으로 새 열을 장식했습니다. 해당 테이블에 이미 일부 행이있는 경우 해당 행은 해당 열을 가질 수 없습니다. 제거가 필요합니다. 마이그레이션보다 모든 행에 데이터를 채 웁니다. 속성을 필수로 설정하고 다시 마이그레이션하십시오.

+2

아마도 정답 일 것입니다. 필요한 속성을 제거하고 마이그레이션하고, 기존 열의 값을 설정하고, 필요한 속성을 추가하고, 다시 마이그레이션해야합니다. – pquest

+0

은 필수 속성을 제거한 후에도 업데이트되지 않습니다. –

관련 문제