2013-01-25 62 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; } 
} 

我有多個限界上下文。根據我在上面使用的類的上下文的功能。

如果我在上下文中添加單個類並忽略所有其他類,那麼它工作正常。

e.g

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

現在,如果我加入UserBrief和UserHRs 它給錯誤「無效列名 '鑑'」爲EF假定這是每一個分層表(TPH)的方法。

我一直在尋找解決方案,但無法找到如何做到這一點。

任何想法? 在此先感謝。

回答

0

TPH方法的POCO對象中的繼承類應表示類的子類型,而不僅僅是屬性節。擁有UserHR和UserAdmin組合的User表將打破此表示形式。

你可以嘗試鑑別屬性添加到User表來修正這個錯誤,但我會建議要麼只是使用Users表爲空的屬性或建模的對象爲1:1的關係:

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

感謝傑克的回覆。 我試圖與上述例如它給我一個錯誤, 的實體類型「UserAdmin」和「UserHR」不能共享表「用戶」,因爲它們不是在同一類型層次或沒有有效的一對一國外密鑰關係與它們之間的主鍵匹配。 – user2011011

+0

啊,UserAdmin和UserHR應該映射到他們自己的表中,所以保留'[Table(「Users」)]'會導致這個錯誤。我應該注意,'UserHR'和'UserAdmin'的EmployeeID鍵應該加上'[ForeignKey(「UserBrief」)]'來修正代碼中的映射問題。 – Jake