2013-04-05 80 views
4

實體框架(和我使用的RIA服務)很好地支持繼承。數據庫映射可以是單表或多表,並且在第一種情況下,數據庫表包含一個包含類型指示符的指示符列。實體框架繼承:按類型排序/分組?

顯然,這標誌是不是在模型中可見,即使它的東西,一想就在ORDER BY和GROUP在訂購。

難道我如果這就是我想要做的還是有更好的方式來訂購或組以某種方式的類型,介紹在基類中有其他的類型的標誌?

我正在使用EF5。

回答

2

是的,我可以想象你想要一個基本類型列表的場景。不幸的是,在概念模型中沒有辦法得到鑑別器(標識符)。我能想到的唯一方法就像

db.BaseObjects.Where(b => ...) 
    .AsEnumerable().Select (b => new {b.GetType().Name, b }) 

之後,您可以按類型名稱進行排序/分組。但是您不能在AsEnumerable之前投影(Select),因此限制數據大小的唯一方法是通過過濾(Where)。

有一個技巧可以將鑑別器列作爲類模型中的可見屬性。您可以在表中創建一個computed column,它只顯示實際鑑別器列的值,並將其映射到標記爲DatabaseGeneratedOption.Computed的屬性。

請注意,這需要special attention與代碼優先(遷移)。插入和更新需要一些性能,因爲EF必須事後讀取數據庫中的值。