ドメイン テーブル構造を考慮して、モデルにデータを入力しようとして行き詰まりました。
ベンダーを格納するメイン テーブルがあり、各ベンダーはマスター カテゴリ ルックアップ テーブルから 1 対多のカテゴリを選択できます。ベンダーの選択は、VendorID と CategoryID のみを格納してそれらをリンクする別のテーブルに格納されます。
クエリ (以下) を記述してカテゴリ テーブルを含めることはできますが、表示できるのはカテゴリ ID のみであり、カテゴリ名は表示できません。
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' という名前のナビゲーション プロパティを宣言していません。
Category テーブルにはナビゲーション プロパティがあります。ルックアップ テーブルへの 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>
更新 2:
より良い解決策があるかもしれませんが、同様の状況で立ち往生している人にとって、これはうまくいきました
<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>