2013-10-24 84 views
1

這裏是一個示例模式,其中 「=>」 代表 「一個一對多」 的關係:

合同=> ContractCustomers
合同=> ContractDiscounts
顧客=> ContractCustomers
DiscountType => ContractDiscounts

我試圖通過一次調用服務器來檢索合同對象及其所有相關詳細信息。

到目前爲止,我用LoadWith:如何檢索LINQ對象及其所有相關信息?

using (Data.ABWXDataContext db = new Data.ABWXDataContext()) 
      { 
       DataLoadOptions options = new DataLoadOptions(); 
       options.LoadWith<Data.Contract>(c => c.ContractCustomers); 
       options.LoadWith<Data.Contract>(c => c.ContractDiscounts); 
       options.LoadWith<Data.ContractDiscount>(c => c.DiscountType); 
       options.LoadWith<Data.ContractCustomer>(c => c.Customers); 
       db.LoadOptions = options; 
       var Contract = from con in db.Contracts 
           where con.ContractId == contractId 
           select con; 
       return Contract.ToList(); 
      } 
     } 

上面的代碼工作正常,包括ContractDiscounts和ContractCustomers表。但它不能讓我訪問(折扣類型,客戶)。我明白他們不是合同的子女,我怎樣才能陪伴他們與合同對象?

我很抱歉,如果這是一個簡單的常見任務。

+0

我會去'VAR合同= db.Contracts .Where(c => c.ContractId == contractId;'並讓方法返回'IQueryable',但我認爲這不會解決你的問題。你能發佈你的元數據定義的類。 – ChrisF

+0

我知道, m不是很幫你,但是當涉及到更復雜的查詢時,我也有點失落,但是似乎使用'JOIN'可能會使它工作。不確定的語法,你有沒有嘗試在你的包括'JOIN'查詢? – Leron

+0

http://msdn.microsoft.com/en-us/library/bb5 34268(v = vs.110).aspx#remarksToggle似乎無法完成。但是,它可能與實體框架。考慮使用它,而不是,因爲它有積極的發展。 – Aron

回答

0

您可以添加不啓動在Contract加載選項:

options.LoadWith<Data.ContractCustomer>(c => c.Customer); 
options.LoadWith<Data.ContractDiscount>(c => c.Discount); 

注意添加許多加載項可能會導致多個查詢被解僱(1分+ N的問題)。你必須檢查它是否仍然有效。稍後根據需求查詢相關數據可能會更高效。

0

I found the answer on this question to work for me

複製答案:

我發現這是什麼! Linq to SQL會將[DataMember()]屬性放在子記錄上,而不是父項。我不得不在關聯下添加[DataMember()]屬性。

的一面是,這是一個手動輸入到將被覆蓋的context.designer.cs如果DBML是:-(改變

[Association(Name="CustomerStatus_Customer", Storage="_CustomerStatus", ThisKey="CustomerStatusId", OtherKey="CustomerStatusId", IsForeignKey=true)] 
[DataMember()] 
public CustomerStatus CustomerStatus 
{ 
    get 
    { 
     return this._CustomerStatus.Entity; 
    } 
    set 
    { 
     ... 
    } 
} 
+0

您確定這不會產生任何副作用嗎? (例如,循環引用,或者當你不想要的時候急於加載。)手動更改dbml是一個大問題。你嘗試了我的建議嗎? –

相關問題