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);
現在,我不需要查詢Foo1s
和Foo2s
表的開銷。我期望查詢只是一個簡單的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]
有沒有辦法告訴實體框架,我不關心其他表;我只是想從頂層的層次結構中獲取數據,因此不需要查詢除頂層表以外的任何其他信息?
非常好!謝謝拉迪斯拉夫。很高興知道它正在修復。 –