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

这可能是基本的东西。在iBATIS(现在是MyBatis)这样的事情中会很容易。我相信在EF中也很容易。

在此先感谢!

回答

1

最简单的方法:在数据库中创建视图,查看地图实体。
- 或 -
使用匿名类型作为结果创建查询。

无论哪种方式,你将有一次只读结果。就我所见,这是你问题的唯一应用。

+0

PublicStatus和StatusGrouping的内容是不变的。这是一种将内部状态映射到公共状态文本以避免暴露内部状态文本的方法。给定的内部状态对应于一定的公共状态文本。只是为了给一点背景。但我认为我描述的问题是基本的和一般的。 – pinkfloydhomer 2012-08-02 13:33:11

+0

如果它是恒定的,你可以在应用程序一边做,而不用打扰LINQ。 – 2012-08-02 13:36:50

+0

是的。但是一般情况下,我们想要通过两个或两个以上的表来加入一些数据,以便将其映射到我们的对象中?虽然你已经回答了。谢谢:) – pinkfloydhomer 2012-08-02 13:39:53