2012-04-11 19 views
3

私はMVC 4、EF 4.3およびMVCScaffoldingパッケージを使用しています。MvcScaffolding 1対多の関係

私は、単純なモデルクラス

public class Product 
{ 
    [Key] 
    public int ID { get; set; } 
    [Required] 
    public string Name { get; set; } 
    public virtual Category Category { get; set; } 
} 
public class Category 
{ 
    [Key] 
    public int ID { get; set; } 
    public string Name { get; set; } 
    public virtual ICollection<Product> Products { get; set; } 
} 

を以下している私はそうのようなコントローラーをスキャフォールド:

これは、コントローラ/ビューなど、私はと思うだろう Steve sanderson's postパー

を生成

Scaffold Controller Category -Force 
Scaffold Controller Product -Force 

製品の_CreateOrEdit.cshtmlにはカテゴリのドロップダウンが含まれていますが、それはありません。

Followngは_CreateOrEdit.cshtmlの内容であり、それはカテゴリー

<div class="editor-label"> 
@Html.LabelFor(model => model.Name) 
</div> 
<div class="editor-field"> 
    @Html.EditorFor(model => model.Name) 
    @Html.ValidationMessageFor(model => model.Name) 
</div> 

私が間違って何をやっているため、任意のHTMLテンプレートが含まれていませんか?

答えて

3

あなたはProductクラスのプロパティCategoryIDを持つ必要があると思います。 EntityFrameworkで外部キーとしてDBに永続化されるため、仮想化されません。

それを追加して、それらを足場に戻して、それがあなたにドロップダウンを与えるかどうかを確認してください。あなたは正しいと思っている。

また、[Key]属性が必要ないと思うので、IDフィールドはキーになります。

+0

ええ、私は今確信しています。チュートリアルをもう一度チェックし、作成した元のモデルの状態を確認してください。彼はTeamIDを持っています。その後、仮想アイテムチームとプレイヤーコレクションを追加します。 CategoryIDをCategoryに置き換えました。または、あなたがCategoryIDの外部キーを持っていなかった。 – Banford

+0

これはMvcScaffoldingの固有の制限だと思われます。ここで嫌うのは、モデルにCategoryIDを公開し、仮想カテゴリプロパティを持っていれば、両方が同期していることを確認する必要があるということです。 –