2014-05-14 12 views
2

可能questin標題不是自我解釋。使用實體框架訪問來自數據庫的基類查詢中擴展類的屬性TPH模式

我有一個ASP.NET MVC5項目與實體框架6.我首先使用代碼,我已經實現了實體的TPH模式。

有一個基本的請求實體(我刪除了大部分字段,它只是一個例子)。

public class Request 
    { 
     public int Id { get; set; } 
     public string Title { get; set; } 
    } 

也有一些機型擴展它獨特的性質:

public class RequestQuestion : Request 
    { 
     public string Question { get; set; } 
     public string Answer { get; set; } 
    } 

public class RequestForWork : Request 
    { 
     public string WorkName { get; set; } 
    } 

他們每個人都被添加到的EntityContext:

public DbSet<Request> Requests { get; set; } 
public DbSet<RequestQuestion> RequestQuestions { get; set; } 
public DbSet<RequestForWork> RequestForWorks { get; set; } 

當我創建了一些我加入請求他們是這樣的:

var db = new EntityContext(); 
var requestQuestion = new RequestQuestion{ some initialization }; 
this.db.Requests.Add(requestQuestion); 
this.db.SaveChanges(); 

問題來了。當我查詢用戶的請求時

var requests = this.db.Students.Find(userId).Requests.ToList(); 

在調試中我可以通過基地訪問每個請求的擴展類的屬性。那麼,是否有辦法以某種方式獲得擴展選定實體並訪問其屬性的類的類型?

當前要建立一個所有請求的列表並填充一些viewmodel的數據我需要單獨選擇每種類型的請求並從這些單獨的選擇中填充一個全局列表。

回答

2

你需要爲基本類型強制轉換爲它的亞型和測試空

foreach (r in requests) 
{ 
    var rq = r as RequestQuestion; 
    if(rq != null) 
    { 
     string rq = rq.Question 
    } 

    var rfw = r as RequestForWork; 
    if(rfw != null) 
    { 
     string wn = rfw.WorkName; 
    } 
} 
+0

謝謝!奇蹟般有效! –