2012-11-15 44 views
0

我被困在試圖讓我的模型填充給定的域表結構。MVC LINQ查詢使用一對多和多對一表填充模型

我有一個存儲供應商的主表,每個供應商可以從主類別查找表中選擇一對多的類別。供應商選擇存儲在另一個表中,該表只存儲VendorID和CategoryID以在它們之間進行鏈接。

我可以編寫查詢(下面)來包含類別表,但我只能顯示categoryID而不顯示類別名稱。

 public VendorProfile GetVendor(String id) 
    { 
     Guid pid = Guid.Parse(id); 
     var view = _db.VendorProfiles.Include("VendorCategories").Single(v => v.ProfileID == pid); 
     return view; 
    } 

我試圖在查詢(下面)中包含查找表,但這是生成運行時錯誤。

 public VendorProfile GetVendor(String id) 
    { 
     Guid pid = Guid.Parse(id); 
     var view = _db.VendorProfiles.Include("VendorCategories").Include("ProductServiceCategory").Single(v => v.ProfileID == pid); 
     return view; 
    } 

指定的包含路徑無效。 EntityType'VendorProfilesIntranet.VendorProfile'不聲明名爲'ProductServiceCategory'的導航屬性。

類別表具有導航屬性。我不知道如何將相同的導航屬性添加到主表,因爲它沒有任何FK到查找表。

更新:

@Gert此符號工作!

_db.VendorProfiles.Include("VendorCategories.ProductServiceCategory").Single(v => v.ProfileID == pid); 

不過,我現在就顯示只有被選中的類別的項目。我希望得到所有分類列表,並檢查選中的分類。我正在使用滾動CheckboxList。

 <div class="scroll_checkboxes"> 
     <ul> 
     @foreach (var c in Model.VendorCategories) 
     { 
      <li> 
       <input type="checkbox" name="categories" value="@c.ID" /> @c.ProductServiceCategory.CategoryName 
      </li> 
     } 
     </ul> 
     @Html.ValidationMessage("Please check at least one Product/Service category") 
    </div> 

UPDATE2:

有可能是一個更好的解決方案,但任何人都堅持了類似的情況,這個工作

 <div class="scroll_checkboxes"> 
     <ul> 
     @foreach (var c in ViewBag.Categories) 
     { 
      <li> 
       @foreach(var vc in Model.VendorCategories) 
       { 
        if(c.Id == vc.CategoryID) 
        { 
         <input type="checkbox" name="categories" checked="checked" value="@c.Id" /> @vc.ProductServiceCategory.CategoryName 
         <br /> 
        } 
        else 
        { 
         <input type="checkbox" name="categories" value="@c.Id" /> @vc.ProductServiceCategory.CategoryName 
         <br /> 
        } 
       } 
      </li> 
     } 
     </ul> 
     @Html.ValidationMessage("Please check at least one Product/Service category") 
    </div> 

回答

1

你可以做

_db.VendorProfiles.Include("VendorCategories.ProductServiceCategory") 

以包括VendorCategories和它們的ProductServiceCategory在結果集中。

順便說一句,如果你使用DbExtensions.Include你有intellisense來幫助你找到正確的包含路徑。

+0

工作的OMG。我從來沒有見過以前使用過的符號。謝謝。但是,我現在顯示的只是所選的類別項目。我希望得到所有分類列表,並檢查選中的分類。我正在使用CheckboxList請參閱上面的UPDATE – SQLGrinder

+0

我認爲您最好使用包含'VendorProfile'和所有類別的視圖模型。客戶端(即cshtml),您可以通過匹配ID或名稱來設置選定的類別。 –