1

これはセットアップです:

モデル:

public class Device
{
    [Key]
    public int Id { get; set; }
    [MaxLength(50)]
    public String Name { get; set; }
    public Category Category { get; set; }
    public Manufactor Manufactor { get; set; }
    public virtual ICollection<Comment> Comments { get; set; }
    public virtual ICollection<Status> Status { get; set; }
}

コントローラのアクション:

public ActionResult Index()
{
   var devices = db.Devices.Include("Categories").Include("Manufactors").Select(x => new Device
                   {
                        Name = x.Name,
                        Category = x.Category,
                        Comments = x.Comments,
                        Manufactor = x.Manufactor,
                        Status = x.Status
                    });
    return View(db.Devices.ToList());
}

意見:

@foreach (var item in Model) {
    <tr>
        <td>
            @Html.DisplayFor(modelItem => item.Name)
        </td>
        <td>
            @Html.DisplayFor(modelItem => item.Manufactor.Name)
        </td>
        <td>
            @Html.DisplayFor(modelItem => item.Category.Name)
        </td>
        <td>
            @Html.DisplayFor(modelItem => item.Status)
        </td>
        <td>
            @Html.ActionLink("Edit", "Edit", new { id=item.Id }) |
            @Html.ActionLink("Details", "Details", new { id=item.Id }) |
            @Html.ActionLink("Delete", "Delete", new { id=item.Id })
        </td>
    </tr>
}

ここでの問題は、名前だけが表示され、表示されitem.Categoryないitem.Manufactorことです。行を単に @item.Category.Name に変更すると、Nullreference 例外が発生します。

データベースのデバイス テーブルを調べると、2 つのデバイスがリストされており、それぞれに CategoryId と ManufactorId が含まれています。

これは 20 分間の簡単なことだと思いましたが、どこかでひどく間違っていたようです。このエラーの解決を手伝ってください。

追加のコードが必要な場合は、コメントに投稿してください。

敬具

編集: これらの非常に役立つ回答に応えて:エラーは私のコントローラーアクションの誤りでした。この解決策はうまくいきました:

return View(db.Devices.Include(d => d.Manufactor).Include(d => d.Category).ToList());
4

2 に答える 2

4

モデル プロパティは と呼ばれCategoryます。Categories,適切に作成していることを確認してくださいInclude

db.Devices.Include("Category")...

Manufacturersもちろん、同じことが言えます。モデル プロパティが呼び出され、正しいものを含めManufactorないでください:Manufactors

.Include("Manufactor")

これで、EF はテーブルで適切な結合を行い、ビューで使用できるプロパティをハイドレートしますCategoryManufactor

于 2013-10-17T19:59:14.087 に答える