0

ドメイン テーブル構造を考慮して、モデルにデータを入力しようとして行き詰まりました。

ベンダーを格納するメイン テーブルがあり、各ベンダーはマスター カテゴリ ルックアップ テーブルから 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>
4

1 に答える 1

1

できるよ

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

VendorCategoriesとそのの両方をProductServiceCategory結果セットに含めます。

ちなみに、DbExtensions.Includeインテリセンスを使用すると、適切なインクルード パスを見つけるのに役立ちます。

于 2012-11-15T22:00:00.590 に答える