2013-04-27 1 views
0

내 모델에 오류가있는 것 같지만 확실하지 않습니다. (아래 손질) 오류코드 첫 번째 모델에서 자동 증분 키가 삽입되지 않음

먼저

The INSERT statement conflicted with the FOREIGN KEY constraint 
"FK_dbo.ProjectDocAccess_dbo.ProjectDoc_ProjectDocAccessID". The conflict 
occurred in database "dbname", 
table "dbo.ProjectDoc", column 'ProjectDocID'. 

ProjectDocAccess 모델

public class ProjectDocAccess 
{ 
    public int ProjectDocAccessID { get; set; } 
    public int ProjectDocID { get; set; } 

    public virtual ProjectDoc ProjectDoc { get; set; } 
} 

(아래 손질)에 ProjectDoc 모델

public class ProjectDoc 
{ 
    public int ProjectDocID { get; set; } 
    public int ProjectID { get; set; } 

    public ProjectDocAccess ProjectDocAccess { get; set; } 
    public Project Project { get; set; } 
} 

유창 API 매핑

 modelBuilder.Entity<ProjectDocAccess>() 
      .HasRequired(p => p.ProjectDoc).WithOptional() 
      .WillCascadeOnDelete(true); 

ProjectDocAccess 테이블에 새 레코드를 삽입하려고하면 ProjectDocAccessID 필드에 값을 삽입해야합니다. 다른 모든 모델에서이 자동 증가합니다. 내가 뭘 잘못하고 있는지 잘 모르겠다. 도움?

UPDATE는

내가 선택한 답변에 따라. 이것이 내가 고치기 위해 한 일입니다.

유창한 API 매핑을 모두 삭제했습니다. 이 글은 보여줍니다 - 당신이 생성 된 마이그레이션 파일을 살펴한다이 같은 문제가 (당신이없는 경우거나 그냥 가능) 때

public class ProjectDocAccess 
{ 
    [Key, ForeignKey("ProjectDoc")] 
    public int ProjectDocAccessID { get; set; } 

    public virtual ProjectDoc ProjectDoc { get; set; } 
} 
+0

삽입하는 코드는 어디에 있습니까? –

답변

1

먼저, 다음과 같이

ProjectDocAccess 모델 업데이트 당신을 위해 생성 된 테이블/매핑의 '상위 레벨'양식. > PK -

문제는 관계를 '1-1'당신이 ProjectDocAccessProjectDoc에 PK로 매핑되어있을 것입니다. 이러한 경우에 코드가 자동으로 수행하므로 지원되는 유일한 방법은 one to one입니다.

그래서 ProjectDocAccessID은 항상 ProjectDocID으로 == the same으로 매핑됩니다.

ProjectDocID은 자동 생성되지만 액세스 ID를 직접 입력해야합니다. (나는 그것이 자동화 될 수 있지만 db 용어로는 정확하지 않을 수 있음을 짐작하고있다).

따라서 자동으로 생성 할 수 없습니다. principal 테이블에서 복사해야합니다. 'optional'은 테이블입니다.

현재 엔티티를 사용하는 것이지만 어쩌면 재 배열 할 수도 있습니다 (일대일 방식은 어렵지만 올바르게 작성하지 않으면 문제가 발생할 수 있음).

FK-S 만 사용하여 one to one을 생성하는 옵션이 있습니다. 그러면 '액세스'테이블에 '독립적 인'기본 키를 입력 할 수 있습니다.하지만 수동으로 SQL CONSTRAINT을 삽입해야합니다.

[DatabaseGenerated(DatabaseGenerationOption.Identity)] 
public int ProjectDocAccessID { get; set; } 

안드레이는 지적 : 당신이 ProjectDocAccessID이 데이터베이스 (ID 열)에 의해 생성하려면 다음이처럼 DatabaseGenerated 속성과 그 속성을 장식한다 http://weblogs.asp.net/manavi/archive/2011/05/01/associations-in-ef-4-1-code-first-part-5-one-to-one-foreign-key-associations.aspx

0

-이 페이지를 참조하십시오 , 당신은 또한 [Key] 속성으로 꾸며야 할 수도 있습니다.

출처 : http://msdn.microsoft.com/en-US/data/jj591583

+0

이전에 시도했습니다. 일하지 않았어. –

+0

그것은 작동하지 않을 것입니다. 그것은 이미 열쇠입니다. 그것은 여러분의'fk'와''pk''입니다. – NSGaga