gpt4 book ai didi

entity-framework - 如何仅查询每个类型的表映射的一个级别?

转载 作者:行者123 更新时间:2023-12-04 06:17:39 25 4
gpt4 key购买 nike

我正在使用 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; }
}

所以这将创建三个表,其中公共(public)属性(Id 和 Name)存储在 FooBase 中。 table 。

在一种特殊情况下,我只对 FooBase 的任何类型的名称列表感兴趣。目的。我不在乎它是否是 Foo1Foo2 .我启动了一个新的数据上下文并运行如下查询:
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]

有没有办法告诉 Entity Framework 我不关心其他表;我只想要来自类层次结构顶层的数据,所以除了顶层表之外不需要查询任何东西?

最佳答案

这是well known issue使用 Table-per-type 继承映射。应该在 upcoming EFv4.2 中解决应该improve the query generation for TPT inheritance .目前没有办法改进它。

关于entity-framework - 如何仅查询每个类型的表映射的一个级别?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7021393/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com