1

我使用Entity Framework 4.1的代碼優先方法將類層次結構映射到一系列表。如何查詢每種類型的表映射的一個級別?

我有以下類中定義:

[Table("FooBases")] 
public class FooBase 
{ 
    public int Id { get; set; } 
    public string Name { get; set; } 
} 

[Table("Foo1s")] 
public class Foo1 : FooBase 
{ 
    public string Details { get; set; } 
} 

[Table("Foo2s")] 
public class Foo2 : FooBase 
{ 
    public string Description { get; set; } 
} 

因此,這將創建三個表,其中公共屬性(編號和名稱)存儲在FooBase表。

在一個特定情況下,我只對任何一種FooBase對象的名稱列表感興趣。我不在乎它是Foo1還是Foo2。我旋轉了一個新的數據環境和運行這樣的查詢:

var names = ctx.Set<FooBase>().Select(f => f.Name); 

現在,我不需要查詢Foo1sFoo2s表的開銷。我期望查詢只是一個簡單的SELECT Name FROM FooBases。相反,我得到這個:

SELECT 
[Extent1].[Name] AS [Name] 
FROM [dbo].[FooBases] AS [Extent1] 
LEFT OUTER JOIN (SELECT 
    [Extent2].[Id] AS [Id] 
    FROM [dbo].[Foo1s] AS [Extent2] 
UNION ALL 
    SELECT 
    [Extent3].[Id] AS [Id] 
    FROM [dbo].[Foo2s] AS [Extent3]) AS [UnionAll1] ON [Extent1].[Id] = [UnionAll1].[Id] 

有沒有辦法告訴實體框架,我不關心其他表;我只是想從頂層的層次結構中獲取數據,因此不需要查詢除頂層表以外的任何其他信息?

回答

相關問題