2013-08-20 2 views
1

내 모델에는 많은 유효한 답변이있을 수 있으며 답변은 많은 질문에 사용될 수 있습니다. 중복을 방지하고 유효성 검사가 효율적인지 확인하기 위해 Answer.Text 속성에 고유 한 인덱스가 있습니다. Seed 메서드에이 코드가 있습니다. 다른 인서트 텍스트 "없음"인 답변 context.SaveChanges 내지 제()에 대한 호출을 시도하기 때문에코드를 사용하여 관계를 시드하는 방법

Answer _None = new Answer { Text = "None", SortOrder = 50 }; 
    context.Answers.AddOrUpdate(x => x.Text, _None); 
    context.SaveChanges(); 

    Question q = new Question 
    { 
     Text = "Bathroom flooring", 
     Answers = new Answer[] 
       { 
        _None,  
        new Answer { Text = "Carpet", SortOrder = 60} 
       } 
    } 
    context.Questions.AddOrUpdate(x => x.Text, q); 
    context.SaveChanges(); 

있어서 에러가 발생. * 고유 인덱스 'IX_NaturalKey'*가있는 'dbo.Answers'개체에 중복 키 행을 삽입 할 수 없습니다. 중복 키 값 (없음)은 "두 번째 삽입은 기존 개체의 관계에 추가 될 때 시도하고 그것을 방지하는 방법이 왜

는이 같은 것을
+0

코드를 시도했는데 제대로 작동 했음 – zsong

+0

질문에 답변을 넣을 때 컨텍스트에서 _None 응답을 가져 오십시오. 컨텍스트에 있음을 알지 못하는 문제 일 수 있습니다. – Thewads

+0

@sza EF6 릴리스 후보를 사용하고 있습니다. 아마도 거기에 문제가 있습니다 ... 그 동안에는 고정 데이터가 필요하기 때문에 SQL 문을 통해 데이터를 삽입하기로 결정 했으므로 삽입을 수행 할 수 있습니다. 마이그레이션의 Up 메서드 및 지금 문제를 주차했습니다 – Colin

답변

0

사용할 수 있습니다 :.?

context.Question.AddOrUpdate(
       p => p.Id, 
       new Models.Question 
       { 
        Question = "Bathroom flooring", 
        //Active = true, 
        Answers = new System.Collections.Generic.List<Answers>(){ 
         new Answers {Id=1, Text = "Carpet",SortOrder=60 }, 
         new Answers {Id=2, Text = "Carpet",SortOrder=60 }, 
      new Answers {Id=3, Text = "Carpet",SortOrder=60 }, 
      new Answers {Id=4, Text = "Carpet",SortOrder=60 }, 
      new Answers {Id=5, Text = "Carpet",SortOrder=60 }, 
        } 
       }); 
+0

답변 테이블에 중복 텍스트가 허용되지 않습니다. 따라서 다른 ID를 가진 많은 "카펫"답변은 허용되지 않습니다. 내가하고 싶은 일은 하나 이상의 질문에 대한 유효한 답변으로 "없음"이라는 텍스트가 포함 된 답변을 추가 할 수 있습니다. 그래서 나는 Question.Text = "Kitchen flooring"을 Question.Answer = _None으로 가질 수도 있습니다. – Colin

+1

이 텍스트는 사용자가 변경할 수있는 예입니다. –

관련 문제