2012-08-14 2 views
9

EF 4.3 이주 기능을 사용하여 데이터베이스 이주 스크립트를 작성 중입니다. 내가 추가 마이그레이션을 실행하면 가 생성 된 스크립트는 너무로 만들어집니다 명령을EntityFramework 이주 cascadeDelete 매개 변수

 CreateTable(
      "dbo.Recipients", 
      c => new 
       { 
        RecipientID = c.String(nullable: false, maxLength: 128), 
        SurveyRoundID = c.String(nullable: false, maxLength: 128), 
        LastUpdatedAt = c.DateTime(), 
       }) 
      .PrimaryKey(t => t.RecipientID) 
      .ForeignKey("dbo.Employees", t => t.EmployeeID, cascadeDelete: true) 
      .ForeignKey("dbo.SurveyRounds", t => t.SurveyRoundID, cascadeDelete: true) 
      .Index(t => t.EmployeeID) 
      .Index(t => t.SurveyRoundID); 

내가 가진 문제는 scafolding 마이그레이션 엔티티받는 사람의 관계의 주인없는 경우에도 사실로 cascadeDelete를 선택한다는 것입니다.

지금 내가 수동으로 false로 cascadeDelete 매개 변수를 변경하고있어하지만 난 기본적으로 true 선택 이유를 알고 싶습니다.

고맙습니다. 이도.

답변

8

예상대로 작동합니다. 관계의 주체가 아니기 때문에 외래 키 제약 조건을 정의하고이 제약 조건은 계단식 삭제 옵션을 갖습니다. (당신이 규칙을 제거하거나 유창한 매핑을 변경하지 않는 한 최초의 EF 코드에서 기본) 캐스케이드 true로 삭제 설정하면 Employee 레코드가 삭제되는 경우 계단식 Recipient의 삭제 (동일 SurveyRounds에 적용) 트리거 삭제하는 것이 말했다.

이 모델은 기업이 여러 관계에 의존하기 때문에 캐스케이드에 대한 삭제 정말 적합하지 않습니다. 엔티티 매핑에서 직접 캐스케이드 삭제를 제거해야합니다. 여러 관계가 폭포가 이상적이지를 삭제하고 내 수업의 몇 가지로 데이터베이스를 업데이트 한 시도 할 때 내가 몰래 때로는 오류를 가지고되었을 때 답변

+0

를 어떻게 함께 DDL에 의존하지 않고 DELETE SET의 NULL' ON'정의하는 지 알고 있나요'는 SQL (..) '마이그레이션에? – JoeBrockhaus

11

덕분에, 그것은 나를 도왔다.

캐스케이드 기본 설정을 삭제 제거 아래를 참조하십시오 :

protected override void OnModelCreating(DbModelBuilder modelBuilder) 
{ 
    modelBuilder.Conventions.Remove<OneToManyCascadeDeleteConvention>(); 
} 

이 내부 상황에 맞는 클래스를 이동합니다.

+0

정확히 내가 무엇을 찾고 있었는지! – Mixxiphoid

+1

그것은 나를 위해 잘 작동합니다. 이것은 정말로 옵트 아웃 대신 옵트 인해야합니다! –