Entity framework 避免导航属性(连接、关系)

Entity framework 避免导航属性(连接、关系),entity-framework,join,ef-code-first,foreign-keys,code-first,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,

想象一下我有这个班

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,我关心的是,每当我从db中获取案例时,我都希望将正确的StatusPublic.Name映射到案例类中的PublicStatusName中

这可能是基本的东西。在像iBATIS(现在的MyBatis)这样的东西中,这将是非常容易的。我相信在EF中也很容易


提前谢谢

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


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

PublicStatus和StatusGrouping的内容是恒定的。这是一种将内部状态映射到公共状态文本的方法,以避免暴露内部状态文本。与给定的内部状态相对应的是某个固定的公共状态文本。只是给你一点背景知识。但我认为我描述的问题是基本的和一般的。如果它是常量,您可以在应用程序端完成它,而不必担心LINQ.True。但是,一般情况下,我们想要连接两个或多个表,以获得一些我们想要映射到对象中的数据,这又如何呢?不过你已经回答了。谢谢:)您能详细介绍一下“创建匿名类型为结果的查询”部分吗?我该怎么做?
Cases.Join(StatusGroupings,c=>c.StatusId,sg=>sg.InternalStatusId,(c,sg)=>new{c.Id,c.Title,sg.PublicStatusId})。Join(StatusPublics,c=>c.PublicStatusId,sp=>sp.PublicStatusId,(c,sp)=>new{c.Id,c.Title,sp.Name})