2013-01-25 2 views
0

나는 하나의 데이터베이스 테이블에EF5 상속

예를 들어 UserBrief 클래스 매핑 클래스의 여러 작은 버전했습니다 :

[Table("Users")] 
public partial class UserBrief 
{ 
    [Key] 
    public int EmployeeID { get; set; } 
    public string FirstName { get; set; } 
    public string LastName { get; set; } 
} 

UserAdmin 클래스

[Table("Users")] 
public partial class UserAdmin : UserBrief 
{  
public int RoleID { get; set; }  
} 

UserHR 클래스

[Table("Users")] 
public partial class UserHR : UserBrief 
{  
    public string EmailAddress { get; set; } 
    public string Phone { get; set; }  
} 
나는 여러했습니다

사용자 클래스

[Table("Users")] 
public partial class User 
{ 
    [Key] 
    public int EmployeeID { get; set; } 
    public string FirstName { get; set; } 
    public string LastName { get; set; } 
    public int RoleID { get; set; } 
    public string EmailAddress { get; set; } 
    public string Phone { get; set; } 
} 

는 상황을 경계. 컨텍스트의 기능에 따라 위의 클래스를 사용했습니다.

컨텍스트에 단일 클래스를 추가하고 다른 모든 클래스를 무시하면 올바르게 작동합니다. 내가 UserBrief 및 UserHRs 을 추가 한 경우 EF는이 (TPH) 접근 계층 당 테이블이라고 가정으로

예컨대

public DbSet<UserHR> UserHRs { get; set; } 
protected override void OnModelCreating(System.Data.Entity.DbModelBuilder modelBuilder) 
{ 
    modelBuilder.Ignore<UserBrief>(); 
    modelBuilder.Ignore<UserAdmin >(); 
    modelBuilder.Ignore<User>(); 
} 

지금은 "잘못된 열 이름 '차별'" 오류 을 제공합니다.

저는 해결책을 찾고 있었지만이를 수행하는 방법을 찾을 수 없습니다.

아이디어가 있으십니까? 미리 감사드립니다.

답변

0

TPH 접근을위한 POCO 객체의 상속 된 클래스는 속성 섹션뿐만 아니라 클래스의 하위 유형을 나타내야합니다. UserHR과 UserAdmin의 조합 인 User 테이블을 사용하면이 표현이 손상됩니다.

단지 1 대 1의 관계로 오브젝트를 널 (NULL) 속성과 Users 테이블을 사용하거나 모델링 오류를 해결하기 위해 User 테이블에 차별 속성을 추가하려고 시도 할 수 있지만, 내가 제안 중 하나를 것입니다 :

public class UserBrief 
{ 
    [Key] 
    public int EmployeeID { get; set; } 
    public string FirstName { get; set; } 
    public string LastName { get; set; } 

    public virtual UserAdmin UserAdmin { get; set; } 
    public virtual UserHR UserHR { get; set; } 
} 

public class UserAdmin 
{  
    [Key] 
    [ForeignKey("UserBrief")] 
    public int EmployeeID { get; set; } 
    public int RoleID { get; set; }  

    public virtual UserBrief UserBrief{ get; set; } 
} 

public class UserHR 
{  
    [Key] 
    [ForeignKey("UserBrief")] 
    public int EmployeeID { get; set; } 
    public string EmailAddress { get; set; } 
    public string Phone { get; set; }  

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

답장을 보내 주셔서 감사합니다. Jake. 위와 같이 시도했습니다. 오류가 발생했습니다. 엔티티 유형 'UserAdmin'과 'UserHR'은 동일한 유형 계층 구조가 아니거나 유효한 일대일 대외 관계가 없기 때문에 '사용자'테이블을 공유 할 수 없습니다. 기본 키와 일치하는 키 관계. – user2011011

+0

아, UserAdmin과 UserHR은 자신의 테이블에 매핑되어야하므로'[Table ("Users")]'를 유지하면이 에러가 발생합니다. 나는 코드에서 매핑 문제를 해결하기 위해'[ForeignKey ("UserBrief")]'는'UserHR'과'UserAdmin'의 EmployeeID 키에 추가되어야합니다. – Jake