我可以使用EF从另一个表中提取值而无需定义新的实体吗?

时间:2012-07-12 14:43:35

标签: entity-framework

我有两个表Jobs和JobGroups。乔布斯看起来像这样:

int Id  (PK)
varchar(30) Description
int GroupId  (FK)

JobGroups看起来像这样

int Id  (PK)
varchar(30) GroupName

我知道使用EF和流畅的api来映射它的唯一方法是定义以下类:

public class Job
{
   public int Id {get; set;}
   public string Description {get; set;}
   public int GroupId {get; set;}
   public JobGroup Group {get; set;}

   //what I would rather see is this
   public string GroupName {get; set;}
}

public class JobGroup
{
   public int Id {get; set;}
   public string Name {get; set;}
}

modelBuilder.Entity<Job>().HasKey(j => j.Id).HasRequired(j => j.JobGroup).WithMany();

但是,我想要的只是JobGroup名称。有没有办法简单地从JobGroups表中提取名称而不必拥有JobGroup类?几乎就像实体拆分一样,除了JobGroups表中不存在Job Id。

感谢您的帮助。

1 个答案:

答案 0 :(得分:0)

否 - 实体框架与实体和实体一起工作必须映射 - 映射告诉EF如何生成SQL以查询数据库。如果你想从未映射的表中获取一些列,你必须编写自己的SQL。

如果要直接用Job而不是JobGroup.Name映射JobGroupId,则必须创建数据库视图,因为此类映射的结果不是实体 - 它是一个投影, EF代码中唯一可用的映射投影首先是数据库视图。这样的投影也是只读的,因为EF不知道如何让Id的{​​{1}}恢复正确地保持JobGroup(它不知道视图是如何创建它的) 。