Entity Framework が正しく設定されていて、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 はビューに含まれていないため null になります。その部分は理解しています。
私の質問は、このエンティティの特定のプロパティのみを更新し、他のすべてのプロパティに既に存在していた値を使用することを EF に伝える方法があるかどうかです。
SomeFieldIDontWantUsersToEdit の元の値を同じにしたいのですが、ユーザーが名と姓を編集できるようにしたいと考えています。1 つまたは 2 つのフィールドだけであれば、もちろん手動で実行できますが、実際のコードではもっと多くのフィールドがあります。
おそらくより良い質問は、これを行うための適切な/推奨される方法は何ですか?