2013-07-07 38 views
0

獲取信息的視圖模型對象,我有以下表格: - enter image description here如何創建從多個數據庫表

但我怎麼能我的asp.net mvc4 web應用程序中創建一個視圖模型類,使如果我通過了AccountDefinition.OrgID我可以檢索如下: -

•accountDefinition

•SDOrganization

•SDOrgPostalAddr

•AaaPostalAddress

我創建了以下爲CustomerDetails視圖模型

public class CustomerDetails 
    { 
     public AccountDefinition AccountDefinition {get; set;} 
     public SDOrganization SDOrganization {get; set;} 

     public virtual ICollection<AaaPostalAddress> AaaPostalAddress { get; set; } 
public virtual ICollection< SDOrgPostalAddr> AaaPostalAddress { get;set; } 

    } 

我有以下的庫方法,它應該填充基礎上,ORG_ID的爲CustomerDetails: -

public CustomerDetails GetCustomer(int ORG_id) { 

CustomerDetails cd = new CustomerDetails(); 
var cd = from SDorg in cd.AccountDefinition // here I will b populating the CustomerDetials 
     } 

我的第二個問題,因爲我有一個數據庫經驗,我會做一個存儲過程,將表連接在一起,然後將結果返回!!!,但由於我使用的是實體fram ework讓我對如何做到困惑?

BR

回答

1

如果你已經從你的數據庫架構創建的實體框架模型,你應該有:

  • AccountDefinition類的AccountDefinition.SDOrganization參考導航屬性,因爲兩者之間的關係顯然是一個一對一

  • A SDOrganization.AaaPostAddresses集合導航屬性,因爲關係是多對多的。因爲它只是衆多一對多鏈路表

在這種模式下,改變您的視圖模型的SDOrgPostalAddr表應該不會出現模型實體...

public class CustomerDetails 
{ 
    public AccountDefinition AccountDefinition {get; set;} 
    public SDOrganization SDOrganization {get; set;} 

    public ICollection<AaaPostalAddress> AaaPostalAddresses { get; set; } 
} 

...你應該能夠使用得到的結果:

var customerDetails = context.AccountDefinitions 
    .Where(a => a.OrgID == givenOrgID) 
    .Select(a => new CustomerDetails 
    { 
     AccountDefinition = a, 
     SDOrganization = a.SDOrganization, 
     AaaPostalAddresses = a.SDOrganization.AaaPostalAddresses 
    }) 
    .SingleOrDefault(); 

您還可以通過預先加載的獲取相同的數據10實體連同所需的導航屬性:

var accountDefinition = context.AccountDefinitions 
    .Include(a => a.SDOrganization.AaaPostalAddresses) 
    .SingleOrDefault(a => a.OrgID == givenOrgID); 
+0

感謝您的回覆。你的拳頭方法會將數據加載爲惰性加載嗎?如果是的話,是否有辦法強制它加載數據爲急切加載? –

+1

@johnG:不,它不是延遲加載。這將是一個單獨的數據庫查詢,像使用'Include'進行熱切加載。 – Slauma