0

繰り返しますが、プロジェクトに問題があります。EF 5 DBContext Generator で作成された 2 つのモデルがあります。

初め:

    public int ID_AN { get; set; }
    public string TITLE_OR { get; set; }
    public string TITLE_EN { get; set; }

    public virtual ICollection<GENRES> GENRES { get; set; }

2番:

    public int ID_GE { get; set; }
    public string GENRE { get; set; }

    public virtual ICollection<ANIME> ANIME { get; set; }

その後、コントローラーを作成しました:

    public ActionResult Details(int id)
    {
        using (var db = new MainDatabaseEntities())
        {
            return View(db.ANIME.Find(id););             
        }
    }

そして見る:

@model AnimeWeb.Models.ANIME

@{
ViewBag.Title = "Details";
}

<h2>Details</h2>

<fieldset>
<legend>ANIME</legend>

<div class="display-label">
     @Html.DisplayNameFor(model => model.TITLE_OR)
</div>
<div class="display-field">
    @Html.DisplayFor(model => model.TITLE_OR)
</div>

<div class="display-label">
     @Html.DisplayNameFor(model => model.TITLE_EN)
</div>
<div class="display-field">
    @Html.DisplayFor(model => model.TITLE_EN)
</div>

</fieldset>

ここまでは問題なく動作していますが、選択したアニメのすべてのジャンルを表示したいと思います。追加しようとすると

<div>
    @Html.DisplayFor(model => model.GENRES)
</div>

エラーが表示されます:「ObjectContext インスタンスは破棄されたため、接続を必要とする操作には使用できなくなりました。」

私はMVCを初めて使用するので、誰かがそれを機能させる方法を説明してくれたらとても感謝しています。

4

3 に答える 3

1

次のように、「include」拡張メソッドを使用して GENRES をロードできます。

db.ANIME.Include("GENRES").Find(id)

@Html.DisplayFor(model => model.GENRES)すべてのジェネレスを表示するために使用する場合は、DisplayTemplates を使用して実行できます。このASP.NET MVC 表示およびエディター テンプレート を確認してください。

于 2013-11-14T03:02:21.403 に答える
0

コントローラーの初期化時にコンテキストを初期化し、コントローラーの dispose メソッドで破棄することを検討してください。

これは、Visual Studio のテンプレートで使用される (ちなみに) パターンです。

public class DemoController : Controller
{
    private MainDatabaseEntities db = new MainDatabaseEntities();

    public ActionResult Details(int id)
    {
        return View(db.ANIME.Find(id));
    }

    protected override void Dispose(bool disposing)
    {
        this.db.Dispose();
        base.Dispose(disposing);
    }
}
于 2013-11-13T23:05:03.990 に答える