想象一下,我有这个课程
public class Case
{
[Key]
[DataMember]
public int CaseId { get; set; }
[DataMember]
public string Title { get; set; }
[DataMember]
public string PublicStatusName { get; set; }
}
基本上,我想采用像这个查询
这样的结果集select c.Id, c.Title, sp.Name
from Case c
inner join StatusGrouping sg on sg.InternalStatusId = c.StatusId
inner join StatusPublic sp on sp.PublicStatusId = sg.PublicStatusId
where c.Id = 42
并把它放到上面的课程中。
我知道我可以在EF中制作导航属性并表达外键关系等。因此,一个(丑陋的)可能性就是在Case类上拥有一个StatusGrouping属性。然后在StatusGrouping类上有一个StatusPublic属性,然后在我读取数据时让EF挂钩层次结构。
但是StatusGrouping表只是一个我不关心的关系表。另外,我不关心PublicStatusId,我关心的是,每当我从数据库中获取一个Case时,我都希望将正确的StatusPublic.Name映射到Case类中的PublicStatusName。
在EF中执行此操作的唯一方法是在db上查看并映射到该文件吗?
答案 0 :(得分:0)
您可以在.edmx文件中使用定义查询。通过这种方式,您可以将查询直接映射到模型类。
有关定义查询的详细信息,请参阅http://msdn.microsoft.com/en-us/library/cc982038.aspx。
答案 1 :(得分:0)
您的查询包含c.StatusId,但您的课程却没有。所以我加了它。
var query = from c in Case
join sg in StatusGrouping on c.StatusId equals sg.InternalStatusId
join sp in StatusPublic on sg.PublicStatusId equals sp.PublicStatusId
where c.CaseId == 42
select new Case { CaseId = c.CaseId, Title = c.Title, PublicStatusName = sp.Name};