EF 코어 1.0 외래 키 문제

entity-framework entity-framework-core

문제

이 EF Core 1.0 버그가 정말로 이해가 안나요?

public class User : BaseEntity
{
    public string Username { get; set; }
}
public class UserDetail : BaseEntity
{
    public int UserId { get; set; }
    public string Address { get; set; }
    public string Country { get; set; }

    public virtual User User { get; set; }

    [ForeignKey("UserId")]
    public virtual ICollection<UserLanguage> Languages { get; set; }
}

public class UserLanguage : BaseEntity
{
    public string Name { get; set; }
    public int UserId { get; set; }
}

내 사용자 테이블에 3 명의 사용자가 있습니다.

public class User : BaseEntity
{
    public string Username { get; set; }
}
public class UserDetail : BaseEntity
{
    public int UserId { get; set; }
    public string Address { get; set; }
    public string Country { get; set; }

    public virtual User User { get; set; }

    [ForeignKey("UserId")]
    public virtual ICollection<UserLanguage> Languages { get; set; }
}

public class UserLanguage : BaseEntity
{
    public string Name { get; set; }
    public int UserId { get; set; }
}

내 UserDetail에는 2 개의 레코드가 있습니다.

public class User : BaseEntity
{
    public string Username { get; set; }
}
public class UserDetail : BaseEntity
{
    public int UserId { get; set; }
    public string Address { get; set; }
    public string Country { get; set; }

    public virtual User User { get; set; }

    [ForeignKey("UserId")]
    public virtual ICollection<UserLanguage> Languages { get; set; }
}

public class UserLanguage : BaseEntity
{
    public string Name { get; set; }
    public int UserId { get; set; }
}

삽입을 수행 할 때 내 UserLanguage에서

public class User : BaseEntity
{
    public string Username { get; set; }
}
public class UserDetail : BaseEntity
{
    public int UserId { get; set; }
    public string Address { get; set; }
    public string Country { get; set; }

    public virtual User User { get; set; }

    [ForeignKey("UserId")]
    public virtual ICollection<UserLanguage> Languages { get; set; }
}

public class UserLanguage : BaseEntity
{
    public string Name { get; set; }
    public int UserId { get; set; }
}

아래 오류가 발생합니다.

public class User : BaseEntity
{
    public string Username { get; set; }
}
public class UserDetail : BaseEntity
{
    public int UserId { get; set; }
    public string Address { get; set; }
    public string Country { get; set; }

    public virtual User User { get; set; }

    [ForeignKey("UserId")]
    public virtual ICollection<UserLanguage> Languages { get; set; }
}

public class UserLanguage : BaseEntity
{
    public string Name { get; set; }
    public int UserId { get; set; }
}

여기서 내가 뭘 잘못 했니? ForeignKey는 UserId입니다. 어떻게 UserDetail 열 'Id'를 가리키게됩니까?

수락 된 답변

다음을 시도해보십시오.

public class User : BaseEntity
{
    public string Username { get; set; }

    public virtual ICollection<UserLanguage> Languages { get; set; }
}
public class UserDetail : BaseEntity
{
    public int UserId { get; set; }
    public string Address { get; set; }
    public string Country { get; set; }

    public virtual User User { get; set; }        
}

public class UserLanguage : BaseEntity
{
    public string Name { get; set; }
    public int UserId { get; set; }

    public virtual User User { get; set; } 
}

문제는 다음 코드 줄에 있습니다.

public class User : BaseEntity
{
    public string Username { get; set; }

    public virtual ICollection<UserLanguage> Languages { get; set; }
}
public class UserDetail : BaseEntity
{
    public int UserId { get; set; }
    public string Address { get; set; }
    public string Country { get; set; }

    public virtual User User { get; set; }        
}

public class UserLanguage : BaseEntity
{
    public string Name { get; set; }
    public int UserId { get; set; }

    public virtual User User { get; set; } 
}

이것은 UserDetail과 UserLanguage 테이블 사이에 외래 키 관계를 생성하는 동안 User와 UserLanguage 테이블 사이에 외래 키 관계를 생성했습니다.

기존 스키마에서 삽입하려고하면

public class User : BaseEntity
{
    public string Username { get; set; }

    public virtual ICollection<UserLanguage> Languages { get; set; }
}
public class UserDetail : BaseEntity
{
    public int UserId { get; set; }
    public string Address { get; set; }
    public string Country { get; set; }

    public virtual User User { get; set; }        
}

public class UserLanguage : BaseEntity
{
    public string Name { get; set; }
    public int UserId { get; set; }

    public virtual User User { get; set; } 
}

UserDetail에 1,2 개의 PK가있는 2 개의 항목이 있고 UserDetail에 PK 3이없는 항목은 성공합니다.


인기 답변

UserLanguage 클래스에 다음을 추가하십시오.

public virtual UserDetail UserDetail  { get; set; }



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