2017-01-03 27 views
1

我想使用DbSet.SqlQuery(字符串,對象[])來返回從DbSet中的實體派生的實體。用DbSet.SqlQuery檢索派生實體

這應該根據文檔(https://msdn.microsoft.com/en-us/library/system.data.entity.dbset.sqlquery(v=vs.113).aspx)是可能的:

創建一個原始的SQL查詢,將在此集中返回的實體。默認情況下,返回的實體由上下文進行跟蹤;這可以通過在返回的DbRawSqlQuery上調用AsNoTracking來改變。請注意,返回的實體始終是此集合的類型,永遠不是派生類型。如果查詢的表格可能包含其他實體類型的數據,則必須正確編寫SQL查詢以確保只返回正確類型的實體

這可能嗎?我還沒有找到辦法做到這一點。

我試過使用Database.SqlQuery,但返回的實體沒有被跟蹤,並沒有設置其導航屬性(我需要)。

我的代碼看起來是這樣的:

public class Notification 
{ 
... 
} 

public class PageNotification : Notification 
{ 
... 
} 

public class SystemNotification : Notification 
{ 
... 
} 

public class MyContext : DbContext 
{ 
    public DbSet<Notification> Notifications { get; set; } 
} 

回答

1

我找到了一種方法來解決這個問題。我所要做的就是爲派生類型添加一個額外的DbSet,並在該集上運行SqlQuery,如下所示:

public class MyContext : DbContext 
{ 
    DbSet<Notifikation> Notifications { get; set; } 
    DbSet<PageNotifikation> PageNotifications { get; set; } 
} 

MyContext.PageNotifications.SqlQuery(...)