如何更新EF中的相关实体(代码优先)

时间:2014-04-25 09:41:42

标签: c# asp.net asp.net-mvc entity-framework ef-code-first

在我的ASP.NET MVC应用程序中,我使用单个视图来编辑实体和一些相关数据。当我将模型传递给控制器​​并将适当的实体标记为已修改时,相关实体不会在我的数据库中更新。这是我的代码(简化版):

型号:

class A
{
    public int ID { get; set; }
    public B SomeProperty { get; set; }
    public string AnotherProperty { get; set; }

    public A()
    {
        SomeProperty = new B();
    }
}

class B
{
    public int ID { get; set; }
    public string SomePropertyInClassB { get; set; }
}

控制器方法:

public ActionResult Edit(A a)
{
    if(ModelState.IsValid)
    {
        var aEntity = _context.Entry(a);
        aEntity.State = EntityState.Modified;
        _context.SaveChanges();
    }
}

" AnotherProperty"已更新,但" SomePropertyInClassB" ISN'吨。我尝试将以下代码添加到上述方法中:

var b = aEntity.Reference(a => a.SomeProperty).CurrentValue;
var bEntity = _context.Entry(b);
bEntity.State = EntityState.Modified;

但它没有用。

1 个答案:

答案 0 :(得分:1)

我提出了解决方案。

在控制器中:

public ActionResult Edit(A a)
{
    if(ModelState.IsValid)
    {
        _context.Entry(a).State = EntityState.Modified;
        _context.Entry(a.SomeProperty ).State = EntityState.Modified;
        _context.SaveChanges();
    }
}

......而且,在我看来,对我来说并不是那么明显:

@Html.Hidden("SomeProperty.ID")