EF 7 : INSERT 문이 FOREIGN KEY SAME TABLE과 충돌했습니다.

asp.net-mvc c# entity-framework entity-framework-core sql-server

문제

SaveChangesAsync를 호출 할 때 예외가 있습니다. 내 아키텍처는 정말 간단하다. 나는 카테고리 클래스를 가지고있다.

public class Category {
  public Guid ID {get; set;}
  public Guid? ParentId {get; set;}
  public Category Parent {get; set;}
 [...]
}

내 ASP MVC 응용 프로그램에 연결된 데이터베이스에 새 범주를 삽입하려면 삽입을 수행하기 전에 GUID를 설정합니다. 데이터베이스가 비어 있고 부모 카테고리를 삽입하려고 할 때 오류가 발생했습니다 (null Guid IdParent 및 null 부모와 함께). 부모 값을 설정하면 이런 일이 발생하지 않습니다. 비주얼 스튜디오에서 부모를 Null로 설정하여 수동으로 레코드를 추가 할 수 있습니다.

다음 오류가 있습니다.

INSERT 문이 FOREIGN KEY SAME TABLE 제약 조건 "FK_Category_Category_ParentId"와 충돌했습니다. 데이터베이스 "HT_Root", 테이블 "dbo.Category", 열 'ID'에서 충돌이 발생했습니다. 그 진술서는 만료되었습니다.

간단한 대답을 위해 스택 오버플로를 검색했지만 찾지 못했습니다. 나는 Fluent API로 시도한다 :

public class Category {
  public Guid ID {get; set;}
  public Guid? ParentId {get; set;}
  public Category Parent {get; set;}
 [...]
}

그러나 아무것도 바뀌지 않았습니다. 내가 도대체 ​​뭘 잘못하고있는 겁니까 ?

수락 된 답변

EF 7에서 바뀐 것 같습니다. 이 github 문제보기

시험

public class Category 
{
    public Guid ID {get; set;}
    public Guid? ParentId {get; set;}
    public Category Parent {get; set;}
    public ICollection<Categories> Children {get; set;}
}

public class Category 
{
    public Guid ID {get; set;}
    public Guid? ParentId {get; set;}
    public Category Parent {get; set;}
    public ICollection<Categories> Children {get; set;}
}

ParentId가 데이터베이스에 있는지도 항상 확인해야합니다 (지정된 경우). 이 문제가 발생할 수 있으므로 null 대신 Guid.Empty (00000000-0000-0000-0000-000000000000) 추가 Guid.Empty .




아래 라이선스: CC-BY-SA with attribution
와 제휴하지 않음 Stack Overflow
이 KB는 합법적입니까? 예, 이유를 알아보십시오.
아래 라이선스: CC-BY-SA with attribution
와 제휴하지 않음 Stack Overflow
이 KB는 합법적입니까? 예, 이유를 알아보십시오.