몇 시간 동안 내 머리를 긁어 왔지만 잘못 된 것 같지 않습니다. 2 MDF 로컬 SQL 서버 : ASP.NET 회원 SQL Azure 예기치 않은 데이터베이스 삭제/재 작성
- MVC 3.0 프로젝트 :
는 여기에 우리의 프로젝트 기본 설정입니다 데이터베이스 파일 첨부 (aspnet.mdf + entities.mdf) - 서버 환경 : Windows Azure + 2 SQL Azure 데이터베이스 (aspnet 및 엔터티) 여기
16,우리가 무슨 짓을했는지 :는
-
는 는
- 가 만든 로컬 및 원격 데이터베이스는, 릴리스 모드에서 디버그 모드와 SQL 애저 연결 문자열에서 SQLEXPRESS 연결 문자열을 사용하도록 수정의 web.config는
- 을 만든
SampleData
클래스는 데이터를 시드하기 위해Seed
메서드를 사용하여DropCreateDatabaseAlways<Entities>
을 확장합니다. Application_Start
에System.Data.Entity.Database.SetInitializer(new Models.SampleData());
을 사용하면 데이터베이스에 데이터를 시드 할 수 있습니다.- 로컬 앱 - 테이블이 생성되고 시드되었습니다. 모두 정상입니다.
- 배포 된 원격 앱 실행 - 테이블이 생성되고 시드되었습니다. 모두 정상입니다.
추가 전처리 지시어는 우리의 원격 푸른 환경을 시작할 때마다 응용 프로그램에서 엔터티 데이터베이스를 파괴 중지 : 그것은 추한 어디서 얻었
#if DEBUG System.Data.Entity.Database.SetInitializer(new Models.SampleData()); #else System.Data.Entity.Database.SetInitializer<Entities>(null); #endif
여기
이야
- NuGet을 사용하여 마이그레이션을 활성화했습니다.
AutomaticMigrationsEnabled = true;
- 모든 것이 부드럽고 멋졌습니다. 우리는
오늘 몇 일 동안 요리를 왼쪽, 우리는 푸른 환경에 알 수없는 버그를 발견 :
- 우리는 슈퍼 클래스
SuperClass
- 해당 엔티티 테이블 상점에서 이러한 모든 파생 여러 수업을 동일한
SuperClass
테이블에있는 객체들, 다양한 클래스를로드 할 때 어떤 열을 급식해야 하는지를 판별하기 위해 판별자를 사용함 오늘까지는로드가 정상적으로 진행되었지만 더 이상 그렇지 않습니다. 우리는 다음과 같은 오류 메시지가 얻을 : 빠른 검사 후
The 'Foo' property on 'SubClass1' could not be set to a 'null' value. You must set this property to a non-null value of type 'Int32'.
- 을, 우리의
SuperClass
표는 열을Foo
및Foo1
있습니다.논리적으로는SuperClass
에SubClass1
과SubClass2
의 서브 클래스가 있으며 각각은Foo
속성을 가지고 있습니다. 이 경우Foo
은 NULL이지만Foo1
의 값은int32
입니다. 따라서 문제는 데이터베이스와 관련이 없습니다. 오히려 모델과 데이터베이스 간의 연결이 끊어지는 것 같습니다. 판별 논리가 손상되었습니다.
- 우리는 슈퍼 클래스
잘못 갔어요 수 있는지에 대한 표시를 찾으려고, 우리는 몇 가지주의 : 우리는 SQL 애저 엔티티 데이터베이스에있는 모든 마이그레이션을 수행하지 비록
- 를 데이터베이스는 이제
_MigrationHistory
있다 테이블 는
_MigrationHistory
표는 하나 개의 기록했습니다MigrationID: 201204102350574_InitialCreate CreatedOn: 4/10/2012 11:50:57 PM Model: <Binary data> ProductVersion: 4.3.1
O를 보면 이 이동이 일어 났을 때 대부분은 비었습니다. 처음에
SampleData
으로 시드 된 테이블 만 변경되지 않았습니다.- SQL Azure 관리 포털에서 확인하면 Entity 데이터베이스는 다음 생성 날짜를 표시합니다 : 4/10/2012 23:50:55. 여기
- 를 데이터베이스는 이제
- 이며, SQL 애저는 시작점을 등록, 삭제 및 우리의 데이터베이스
- _MigrationHistory 테이블이 과정에서 생성 된 재현 향후 마이그레이션을 위해 모델을 테스트하는 방법
는 여기에 우리의 질문입니다
- 누가/데이터베이스 삭제/오락 트리거 무엇?
Application_Start
의 데이터가System.Data.Entity.Database.SetInitializer<Entities>(null);
이므로 EF가 샘플 데이터를 다시 시드 할 수 있습니까?
편집 : 잘못 갔어요 수있는 것을 보면, 우리는 우리가이 SQL 애저 tutorial에서 존중하지 않은 한 가지를 발견 : 우리는 우리의 SQL 애저 엔티티 데이터베이스 연결에서 PersistSecurityInfo
를 제거하지 않았다 데이터베이스가 작성된 후. 자열. 왜 지구상에서 문제를 일으킬 수 있었는지 알 수는 없지만 언급 할만한 가치가 있습니다 ...
SQL 관리 포털에 로그인했을 때 비슷한 경험을했습니다. 데이터베이스가 사라졌습니다. 나는 아직도 그 일이 어떻게 일어 났는지 전혀 모른다.내 앱의 프로덕션 출시 후 조심해야합니다. –