我被困在試圖讓我的模型填充給定的域表結構。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>
工作的OMG。我從來沒有見過以前使用過的符號。謝謝。但是,我現在顯示的只是所選的類別項目。我希望得到所有分類列表,並檢查選中的分類。我正在使用CheckboxList請參閱上面的UPDATE – SQLGrinder
我認爲您最好使用包含'VendorProfile'和所有類別的視圖模型。客戶端(即cshtml),您可以通過匹配ID或名稱來設置選定的類別。 –