在我的 ASP.NET MVC 应用程序中,我使用单一 View 来编辑实体和一些相关数据。当我将模型传递给 Controller 并将适当的实体标记为已修改时,相关实体不会在我的数据库中更新。这是我的代码(简化版):
型号:
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; }
}
Controller 方法:
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;
但它不起作用。
我想到了解决方案。
在 Controller 中:
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")
我是一名优秀的程序员,十分优秀!