1

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

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

JobGroups 看起来像这样

int Id  (PK)
varchar(30) GroupName

我知道使用 EF 和 fluent 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。

谢谢你的帮助。

4

1 回答 1

0

否 - 实体框架与实体一起使用,并且必须映射实体 - 映射告诉 EF 如何生成 SQL 来查询数据库。如果要从未映射的表中获取某些列,则必须编写自己的 SQL。

如果您想Job直接映射JobGroup.Name而不是JobGroupId必须创建一个数据库视图,因为这种映射的结果不是实体 - 它是一个投影,EF 代码中唯一可用的映射投影首先是数据库视图。这种投影也是只读的,因为 EF 不知道如何让Id背面JobGroup正确持久化 a Job(它不知道视图是如何创建它的)。

于 2012-07-12T19:55:55.177 回答