2013-07-19 3 views
2

내 로컬 컴퓨터에서 실행될 때 내 시드 메서드가 완벽하게 작동하지만 appharbor에 코드를 푸시하면 시드가 작동하지 않습니다. 시드 메서드는 로컬 컴퓨터에서 작동하지만 appharbor에서는 작동하지 않습니다.

내 연결 문자열입니다

<connectionStrings> 
    <add name="FinalProjectContext" connectionString="Data Source=.\SQLEXPRESS;User 
Id=user;Password=pass;initial catalog=MyContextDB;" 
providerName="System.Data.SqlClient" /> 
</connectionStrings> 

내 종자 방법은 마이그레이션에 대한 Configuration 파일 내부 :

public Configuration() 
{ 
    AutomaticMigrationsEnabled = true; 
    AutomaticMigrationDataLossAllowed = true; 
} 

protected override void Seed(MyContext context) 
{ 
    //add data 
} 

그리고 나는 내부 상황에 맞는 클래스에서 내 종자 메소드를 호출하는거야 OnModelCreating :

protected override void OnModelCreating(DbModelBuilder modelBuilder) 
{ 
    Database.SetInitializer(new MigrateDatabaseToLatestVersion<MyContext, Configuration>()); 
} 

편집

SQL Server Addon and Settings

+1

AppHarbor는 SQLExpress를 지원합니까 ?? – JayC

+0

@JayC 모르겠지만 appharbor이 내 연결 문자열을 바꿔야한다고 생각하지 않아 SQL 별칭 필드에 내 컨텍스트 이름을 입력해야합니다. – SOfanatic

+0

@SOfanatic 올바른 연결 이름과 MSSQL 서버에 대한 "app/plugin"(AppHarbor이 호출하는 모든 것)에 대한 설정이 필요하다고 생각합니다. 그런 다음에 만 연결 문자열을 대체합니다. 이것에 대한 빠른 테스트는'ConfigurationManager.ConnectionStrings [ "MyContext"]. ConnectionString' (Response.Write 또는 일부 컨트롤러/뷰 사용)을 시도하고 인쇄하는 것입니다. – Alxandr

답변

1

위해 그것을 밖으로 스왑 알, 문제는 정말 당 appharbor 관련되지 않았습니다 말하다. 프로젝트는 컨텍스트에 대해 DBFactory를 사용하고 있으며, 문제가 발생한 곳입니다. 내 로컬 컴퓨터에서 EF는 응용 프로그램을 시작할 때마다 Initializer를 호출하여 데이터베이스에 시드를 가져 오지만이 응용 프로그램이 작동하도록하기 위해 DBFactory 생성자에서 Initializer를 false (명시 적)로 설정해야했습니다.

편집

이 문제는 더 나아가. EF가 이것을 어떻게 추적하고 있는지 확실하지 않지만 코드를 로컬에서 실행하면 데이터베이스가 로컬에서 생성되고 EF는 마이그레이션을 "실행"으로 플래그 지정하므로 Appharborit으로 코드를 옮길 때 시드되지 않습니다. 이 문제를 해결할 수있는 유일한 방법은 데이터베이스를 로컬에서 삭제 한 다음 Appharbor에 푸시하는 것입니다.

0

문제는 연결 문자열이 AppHarbor으로 설정되어 있지 않은지 아마. 나는 그것이 않도록하는 방법을 전혀 모르겠어요,하지만 당신은 여기에서 MSSQL- "부가 기능"에 대한 구성 페이지로 이동하는 경우 : 다음 설정

config variables

연결에 "SQLSERVER_CONNECTION_STRING_ALIAS는"입니다 -String 이름 여기 (귀하의 경우 "MyContext".

아마도 트릭을 할해야 config-page

0

당신의 ConnectionString에 이름이 별칭 예와 동일해야합니다 "FinalProjectContext"그럼

<add name="FinalProjectContext" connectionString="Data Source=.\SQLEXPRESS;UserId=user;Password=pass;initial catalog=MyContextDB;" providerName="System.Data.SqlClient" /> 

appharbor는, 테스트 및 독서 검색, 디버깅을 많이 후 적절한 일 :

+0

오타 되었기 때문에 미안하다는 것을 알고 있습니다. – SOfanatic

관련 문제