2014-04-25 21 views
2

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

型号:

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” 不是。我已经尝试将以下代码添加到上述方法中:

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

但它不起作用。

回答

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")