EF 4:缺少基本功能?

时间:2012-08-03 07:18:19

标签: entity-framework foreign-keys

想象一下,我有这个课程

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上查看并映射到该文件吗?

2 个答案:

答案 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};