1

編集後のアクションでナビゲーション プロパティにアクセスする必要がありますが、データベースを呼び出してモデルを「再更新」する現在の方法は、最善の方法ではないようです。より良い解決策はありますか?

public class Foo
{
    public int Id { get; set; }
    public string SomeProp { get; set; }
}

public class Bar
{
    public int Id { get; set; }
    public int FooId { get; set; }
    public Foo Foo { get; set; }
}

[HttpPost]
public ActionResult Edit(Bar bar)
{
    // Here bar.FooId is set but bar.Foo is null as bar is not a Dynamic Proxy.

    ...

    bar = db.Bar.Find(bar.id);
    TryUpdateModel(bar);

    return View(bar);  // Here bar.Foo is set.
}

私が見つけた別の方法は次のとおりです。

db.Bar.Attach(bar);
db.Entity<Bar>(bar).Reference(b => b.Foo).Load();

ただし、必要なすべてのナビゲーション プロパティへの参照を作成する必要があります。

4

1 に答える 1

0

これが正しい方法なのか最善の方法なのかは 100% わかりませんが、投稿を処理している UI フォームでは、UI 要素をナビゲーション プロパティにバインドする必要があるか、隠しフィールドとして渡すこともできます。それらが変更されていない場合

<!-- example of hidden properties -->
@Html.HiddenFor(x=>x.Foo.FooId)

<!-- exampld of editable UI element mapped to navigation property's someprop property -->
@Html.TextBoxFor(x=>x.Foo.SomeProp)
于 2013-09-06T17:49:28.780 に答える