2013-09-24 49 views
0

我有表許多 - 在實體框架多對多的關係處理問題

遊客

  1. Tourist_ID

    2.Name


個Extra_Charges

  1. Extra_Charge_ID
  2. 說明

Toutist_Extra_Charges

  1. Tourist_Extra_Charge_ID - 主鍵
  2. Tourist_ID - 外鍵
  3. Extra_Charge_ID - 外鍵

我嘗試使用實體框架ENT

"Select Tourist.Name, Extra_Charges.Extra_Charge_Description, FROM Tourist 

LEFT JOIN TOURIST_EXTRA_CHARGES on Tourist.Tourist_ID = TOURIST_EXTRA_CHARGES.Tourist_ID 
LEFT Join EXTRA_CHARGES on TOURIST_EXTRA_CHARGES.Extra_Charge_ID = EXTRA_CHARGES.Extra_Charge_ID 
WHERE Tourist.Tourist_ID=86 

我想取得編號爲旅遊名,使這個sql查詢= 86(事件,如果他沒有額外費用),如果他有超額費用 - 特別說明

因爲我是新來的實體框架我嘗試以下

foreach (var tourist in db2.Tourist.Include("TOURIST_EXTRA_CHARGES").Include("EXTRA_CHARGES").Where(x=>x.Tourist_ID==86)) 
        { 
         lblproba.Text+="Name" + tourist.Name_kir+" Description" + tourist.TOURIST_EXTRA_CHARGES.//don't have access to extra_charges table 


        } 

但是,當我鍵入tourist.TOURIST_EXTRA_CHARGES我沒有獲得extra_charges表及其說明列


編輯:

,我讀了要使用具有多對多關係的實體框架映射,我應該刪除我的列TOURIST_EXTRA_CHARGE_ID並創建組合主鍵。 但是當我這樣做 - 並且製作了新的edmx模型時 - 我現在看不到我的Tourist_Extra_Charges表。 而nomatter多少次,我創建的模型 - 並沒有出現在模型中,這臺

回答

1

我現在看不到我的Tourist_Extra_Charges表

這是預期的鏈接表在許多一對多的關係,你不需要這個表作爲一個實體。

Tourist實體現在應該有一個收集EXTRA_CHARGES,你可以像這樣進行查詢:

var tourist = db2.Tourist 
    .Include("EXTRA_CHARGES") 
    .SingleOrDefault(t => t.Tourist_ID == 86); 

if (tourist != null) 
{ 
    lblproba.Text += "Name " 
     + tourist.Name_kir 
     + " Description " 
     + string.Join(", ", tourist.EXTRA_CHARGES.Select(e => e.Description)); 
} 

我已經SingleOrDefault取代foreach循環,因爲你是主鍵只能有一個查詢結果(或沒有)。 EXTRA_CHARGES.Select(e => e.Description)從每個額外費用中提取描述並返回一個新的字符串集合。 string.Join將集合中的所有描述連接在一起,並用逗號分隔它們。

+0

你救了我的命!!!!謝謝! –

0

您的數據庫結構錯誤。如果您需要使用許多關係鏈接兩個表格,則必須再添加一個表格,因此稱爲「橋樑」表格,其中包含來自其他2個表格的2個PK。當你擁有它時,EF會自動將其解析爲關係屬性「many2many」