避免导航属性(连接,关系)

时间:2012-08-02 13:16:50

标签: entity-framework join ef-code-first foreign-keys code-first

想象一下,我有这个课程

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。

这可能是基本的东西。在像iBATIS(现在的MyBatis)这样的东西上会很容易。我确信EF也很容易。

提前致谢!

1 个答案:

答案 0 :(得分:1)

最简单的方法:在数据库中创建视图,将实体映射到视图 - 或 -
创建具有匿名类型的查询作为结果。

无论哪种方式,您都会获得一次性的只读结果。据我所知,这是你问题的唯一应用。