나는 최선의 해결책을 모르는 문제가 있습니다. 다행히도 여기 누군가가 도움이 될 수 있습니다.)유창한 매핑 상속
해결하려는 내용 : 시스템, 사람 및 조직에 사용자를 입력해야합니다. 둘의 공유 로그인 테이블을 갖고 싶습니다. 즉, 사용자가 어떤 유형의 사용자인지 알 수 없으며 사용자 이름과 암호와 관련이 있습니다. 그래서 사용자 이름과 암호에 대한 로그인 테이블을 만들었습니다. 하지만 로그인이 연결된 사람을 알아야하므로 사람이나 조직에 대한 참조가 필요합니다.
public class Login
{
public string Username {get; set;}
public string Password {get;set;}
}
public class LoginPerson : Login
{
public Person Person {get;set;}
}
public class LoginOrg : Login
{
public Organization Organization {get;set;}
}
public class Person
{
public LoginPerson LoginPerson {get;set;}
//Lots of other properties. Removed for simplicity
}
public class Organization
{
public LoginOrg LoginOrg {get;set;}
//Lots of other properties. Removed for simplicity
}
사람의 구성은 다음과 같이 설정 :
은 (간체) 다음과 같은 클래스 고려 모든
public class PersonConfiguration : EntityTypeConfiguration<Person>
{
public PersonConfiguration()
{
HasRequired(p => p.LoginPerson).WithRequiredPrincipal(p => p.Person);
}
}
먼저,이 작동하지 않습니다. 예외가 발생합니다. "System.Data.EntityCommandCompilationException : System.Data.EntityCommandCompilationException : 명령 정의를 준비하는 동안 오류가 발생했습니다. 자세한 내용은 내부 예외를 참조하십시오.> System.Collections.Generic.KeyNotFoundException : 제공된 키 사전에 없었어요 .. " 내 첫 번째 질문은 왜 이렇게 작동하지 않는 것입니까? 두 번째 질문은 어떤 전략이 이러한 종류의 상속에 가장 적합한가요? TPT, TPH 또는 TPC?
기본 키를 포함하지 않아서 죄송합니다. 나는 수업을 단순화 할 때 수업을 삭제했습니다. 모든 클래스에는 PK 인 Id 열이 있습니다. 순환 참조는 탐색 속성이므로 의도적입니다. 그러나, 나는 예외 문제를 해결했다. 그리고 내 두 번째 질문은 Google = – Zaphod