我有两个表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。
感谢您的帮助。
答案 0 :(得分:0)
否 - 实体框架与实体和实体一起工作必须映射 - 映射告诉EF如何生成SQL以查询数据库。如果你想从未映射的表中获取一些列,你必须编写自己的SQL。
如果要直接用Job
而不是JobGroup.Name
映射JobGroupId
,则必须创建数据库视图,因为此类映射的结果不是实体 - 它是一个投影, EF代码中唯一可用的映射投影首先是数据库视图。这样的投影也是只读的,因为EF不知道如何让Id
的{{1}}恢复正确地保持JobGroup
(它不知道视图是如何创建它的) 。