Entity framework EF4:基本功能缺失?

Entity framework EF4:基本功能缺失?,entity-framework,foreign-keys,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,

想象一下我有这个班

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中


在EF中进行此操作的唯一方法是在db上创建视图并映射到该视图吗?

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


有关定义查询的详细信息,请参阅。

您的查询包含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};