2013-06-23 97 views
1

我想使派生類,有一些額外的屬性(LoginUser類)我的用戶對象,但隨後實體框架返回派生類,當我從獲取用戶數據庫。這是不必要的。該派生類沒有參數的構造函數,只應作爲登錄的包裝產生。所以我加入到這一到onCreateModel:」使用基類的映射派生類 - 實體框架5

modelBuilder.Ignore<LoginUser >(); 

但現在,當我嘗試?存儲或引用我的LoginUser對象時,它拋出一個異常,稱該實體沒有映射(LoginUser)如何讓實體框架使用的映射基類

這是我的課:

public class User 
{ 
    public int Id { get; set; } 

    public string Name { get; set; } 

    public string Role { get; set; } 
} 



public class LoginUser : User, IPrincipal 
{ 
    private IPrincipal underlayingPrincipal; 

    public IIdentity Identity 
    { 
     get 
     { 
      return this.underlayingPrincipal.Identity; 
     } 
    } 

    public LoginUser(IPrincipal principal, User user) 
    { 
     this.underlayingPrincipal = principal; 
     this.Id = user.Id; 
     this.Name = user.Name; 
     this.Role = user.Role; 
    } 

    public bool IsInRole(string role) 
    { 
     return this.Role == role; 
    } 
} 

回答

2

LoginUser不應該擴展用戶,它應該是一個獨立的當你檢索/存儲你的用戶時,你將從/映射到用戶。 數據庫模型類應該留數據庫,你傳遞的類的意見應該是獨立的,從數據庫模型映射。

如果無論如何要User類通過你的模型,你可以只讓部分用戶類,並添加互補inof(性能,接口,...)

partial class User 
{ 
    private IPrincipal underlayingPrincipal; 
    public IIdentity Identity 
    { 
    get 
    { 
     return this.underlayingPrincipal.Identity; 
    } 
    } 

    public User(IPrincipal principal, User user) 
    { 
    this.underlayingPrincipal = principal; 
    this.Id = user.Id; 
    this.Name = user.Name; 
    this.Role = user.Role; 
    } 

    public bool IsInRole(string role) 
    { 
    return this.Role == role; 
    } 
} 
+0

我最終作出我的LoginUser對象中的User類型屬性不再擴展它。謝謝。 – Osd

相關問題