.net - Entity Framework 代码优先 : select data from table with discriminator

标签 .net entity-framework ef-code-first

首先抱歉,如果我的标题不清楚,但我确实很难把它写成英文的简单句子:)。

假设我有一个管理人员和 super 英雄的网站,我有 2 个类:

 public class Person
    {      
        [Key]
        public int PersonId { get; set; }

        [MaxLength(100)]
        public string Name { get; set; }    
    }

  public class SuperHero:Person
    {    
        [MaxLength(100)]
        public string SuperHeroName { get; set; }
        public virtual ICollection<SuperPower> SuperPowers{ get; set; }
    }

在我的数据库中,我有这个:

人 1:Id = 1 姓名 ="Alex Flimster"鉴别器 = "人"

人 2 : ID = 2 Name="Bruce Wayne"discriminator="SuperHero"SuperHeroName="Batman"

我知道如果我这样做:
var test = from Context.Person select p;

我得到了每个人,英雄与否。

如果我只想要英雄,我会这样做:
var test = from Context.Person.OfType<SuperHero>() select p;

我的问题是:我如何只得到这个人?
var test = from Context.Person.OfType<Person>() select p; 

将返回与第一次测试相同的结果。

编辑
我想我的问题并不完全清楚。
假设我有 200 个人,除此之外还有 10 个 super 英雄。我需要一个查询,该查询将返回所有 Person 并且没有任何可能的继承类。
(假设我还有另一个类“VideoGame Hero”,它也继承自 person。我需要一个简单的查询,该查询只是 person 而不是其他任何类)

谢谢!

最佳答案

尝试这个

from p in Context.Person
where !(p is SuperHero)
select p

或者流利的
Context.Person.Where(p => !(p is SuperHero))

更新:SQL 将如下所示:
SELECT 
[Extent1].[Discriminator] AS [Discriminator], 
[Extent1].[PersonId] AS [PersonId], 
[Extent1].[Name] AS [Name], 
[Extent1].[SuperHeroName] AS [SuperHeroName]
FROM [dbo].[Person] AS [Extent1]
WHERE ([Extent1].[Discriminator] IN (N'SuperHero',N'Person')) 
      AND ([Extent1].[Discriminator] <> N'SuperHero')

关于.net - Entity Framework 代码优先 : select data from table with discriminator,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15772814/

相关文章:

c# - SaveChanges 不适用于我的所有项目?

c# - EF Code First From DB 不为所有表创建实体

asp.net-mvc-3 - MVC3 - 如何将新创建的子对象链接到其父对象?

c# - 一般 GDI+ 错误(错误号 -2147467259)

c# - 参数匹配不能与 NSubstitute 一起正常工作

c# - 如何使用 Trello.NET 从 Trello 获取所有看板?

sql - 更新多个多对多关系

entity-framework - EF5 迁移 - 删除约束时重复/重新定义的变量错误 |使用 SQL GO 命令的问题

c# - 'HttpRequest' 不包含 'Params' 的定义

ef-code-first - 使用 Entity Framework Code First 存储只读计算字段