2012-08-02 105 views
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