2

몇 시간 동안 내 머리를 긁어 왔지만 잘못 된 것 같지 않습니다. 2 MDF 로컬 SQL 서버 : ASP.NET 회원 SQL Azure 예기치 않은 데이터베이스 삭제/재 작성

  • 엔티티 프레임 워크 4.3, 코드 첫 번째 접근 방식
  • 지역 환경

    • MVC 3.0 프로젝트 :


      는 여기에 우리의 프로젝트 기본 설정입니다 데이터베이스 파일 첨부 (aspnet.mdf + entities.mdf)

    • 서버 환경 : Windows Azure + 2 SQL Azure 데이터베이스 (aspnet 및 엔터티)
    • 여기


    16,우리가 무슨 짓을했는지 :

    은 는
      는 는
    • 가 만든 로컬 및 원격 데이터베이스는, 릴리스 모드에서 디버그 모드와 SQL 애저 연결 문자열에서 SQLEXPRESS 연결 문자열을 사용하도록 수정의 web.config는
    • 을 만든 SampleData 클래스는 데이터를 시드하기 위해 Seed 메서드를 사용하여 DropCreateDatabaseAlways<Entities>을 확장합니다.
    • Application_StartSystem.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 표는 열을 FooFoo1 있습니다.논리적으로는 SuperClassSubClass1SubClass2의 서브 클래스가 있으며 각각은 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를 제거하지 않았다 데이터베이스가 작성된 후. 자열. 왜 지구상에서 문제를 일으킬 수 있었는지 알 수는 없지만 언급 할만한 가치가 있습니다 ...

    +0

    SQL 관리 포털에 로그인했을 때 비슷한 경험을했습니다. 데이터베이스가 사라졌습니다. 나는 아직도 그 일이 어떻게 일어 났는지 전혀 모른다.내 앱의 프로덕션 출시 후 조심해야합니다. –

    답변

    0

    Nevermind, 우리 문제의 원인을 발견했습니다. 누구라도 궁금해하는 경우 : 우리는 전 처리기 지시문을 추가 한 이후로 Azure를 배포하지 않았습니다. MS가 VM이있는 시스템을 다시 시작해야하며 새 VM은 데이터보기를 사용하여 데이터베이스를 다시 작성했습니다.

    학습 : 자주 Azure를 자주 배치하십시오.

    관련 문제