2014-10-29 29 views
1

我想在EF使用繼承並紛紛拿出以下(簡化):如何在EF中使用繼承時包含屬性?

public abstract class Job 
{ 
    public int Id { get; set; } 
    public DateTime ScheduledTime { get; set; } 
} 

[Table("InstallationJobs")] 
public class InstallationJob : Job 
{ 
    public PbnSite Site { get; set; } 
} 

而且我的DbContext有以下幾點:

public DbSet<Job> Jobs { get; set; } 

現在,我想得到一個隨機的工作(我之前已經插入):

var job = _dbContext.Jobs.OrderBy(x => x.ScheduledTime).FirstOrDefault(); 
//logic to find out which job time was retrieved and then get the specific information 

然後返回一份工作!但是,當我將作業轉換爲正確的作業類型(本例中爲InstallationJob)時,它沒有關於「網站」屬性的任何信息。 (因爲我沒有包括它)。

但是,我將如何去包括它看到喬布斯是一個通用的表?

當作業childtype十一要包括X的性能,當它是YI的要包括Y.

的性質
+0

我會離開對更有經驗的人的回答,因爲我認爲桌面perheirarchy是默認的(你在做代碼優先,對嗎?),應該用你擁有的東西來實現(基於:http:// weblogs。 asp.net/manavi/inheritance-mapping-strategies-with-entity-framework-code-first-ctp5-part-1-table-per-hierarchy-tph)你當然可以用dbSet 並移動到每種類型的表,但它應該默認爲前者? – 2014-10-29 23:27:39

回答

1

可以使用OfType方法得到的派生類對象

var job = _dbContext.Jobs.OrderBy(x => x.ScheduledTime) 
         .OfType<InstallationJob > 
         .FirstOrDefault(); 
+0

我明白了。但是有一個問題:如果我想在所有工作的最早計劃時間(不考慮工作類型),然後將最早的工作轉換爲特定類型,那該怎麼辦? – JensOlsen112 2014-10-30 01:07:08

+0

嗨,仁,如果這是一個不同的問題,那麼創建一個新的問題,所以我或其他人可以幫助你。 – 2014-10-30 13:35:08

+0

嗯,是的,你可以*嘗試*將其轉換爲特定類型,因爲這個最早的工作可以是任何類型。 – 2014-10-30 22:34:49