假设我正确设置了实体框架,并且 POCO 类具有正确的关系等。
<!-- language: c# -->
public class Person
{
public int Id { get; set; }
public string FirstName { get; set; }
public string LastName { get; set; }
public string SomeFieldIDontWantUsersToEdit { get; set; } // there are a lot of these
public IList<Address> Addresses { get; set; }
}
public class Address
{
public string EntireAdressInOneLine { get; set; }
}
当我向用户显示内容时,我只想显示 FirstName 和 LastName 以及地址。这行得通,并且视图运行正常。
这是我的看法:
<!-- language: c# -->
@using (Html.BeginForm(actionName: null, controllerName: null, method: FormMethod.Post))
{
@Html.TextBoxFor(model => Model.Person.FirstName)
@Html.TextBoxFor(model => Model.Person.LastName)
@Html.HiddenFor(model => Model.Person.Id)
}
但是,当需要更新此条目时,我迷路了。如果这是更新操作:
<!-- language: c# -->
[HttpPost]
public ActionResult UpdatePerson(int personId, Person updatedPerson)
{
if (ModelState.IsValid)
{
}
}
当我提交表单时,模型绑定器将拾取我想要一个 Person 对象。酷,这行得通。当然, SomeFieldIDontWantUsersToEdit 将是空的,因为它没有包含在视图中——我理解那部分。
我的问题是,有没有办法告诉 EF 我只想更新这个实体中的某些属性,并使用所有其他属性已经存在的任何值。
我希望 SomeFieldIDontWantUsersToEdit 的原始值相同,但希望允许用户编辑名字和姓氏。如果只有 1 或 2 个字段,当然,我可以手动完成,但实际代码中的字段要多得多。
也许更好的问题是,这样做的正确/推荐方式是什么?