0

想象一下我有这门课

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,我只关心每当我从数据库中获取案例时,我希望将正确的 StatusPublic.Name 映射到 Case 类中的 PublicStatusName 中。

是在 EF 中执行此操作以在 db 上查看并映射到该视图的唯一方法吗?

4

2 回答 2

0

您可以在 .edmx 文件中使用定义查询。通过这种方式,您可以将查询直接映射到您的模型类。

有关定义查询的更多信息,请参阅http://msdn.microsoft.com/en-us/library/cc982038.aspx

于 2012-08-03T07:34:18.717 回答
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};
于 2012-08-16T10:00:49.103 回答