后期行动的导航属性

时间:2013-09-06 17:24:13

标签: asp.net-mvc entity-framework navigation-properties dynamic-proxy

我需要在帖子编辑操作上访问导航属性,但是当我调用数据库并“重新更新”模型时,我所做的当前方式看起来不是最佳选择。有更好的解决方案吗?

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();

但它要求我引用我需要的所有导航属性。

1 个答案:

答案 0 :(得分: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)