私はこの質問を投稿しましたが、実際の質問を上書きしてコードを投稿しただけで、クローズすることが投票されました。私は質問がかなり熱狂的で、公正な揺れがなかったと思ったので、もう一度投稿します.
Entity Framework 4.1 を使用しています。かなりの数のフィールドがあるフォームがあります。テーブル自体には、実際にはフォームにあるものよりも多くのフィールドがあります。変更されたフィールドだけを更新する方法を見つけようとしています。ここでその例を見つけました:
40 以上のフィールドを手動で指定する必要がないように、以下のコードに修正しました。これを行うには、以下よりもクリーンな方法があることを願っています。ある?
以下のコードは最初のドラフトであり、かなり粗雑であることに注意してください。すべての提案を歓迎します。ありがとう!
[HttpPost]
public ActionResult Edit(Location location, FormCollection fields)
{
if (ModelState.IsValid)
{
//db is my context
db.Locations.Attach(location);
StringBuilder sb = new StringBuilder();
//Get properties of Location object
PropertyInfo[] pi = typeof(Location).GetProperties();
//loop over keys of fields submitted by the post
foreach (string submittedField in fields.Keys)
{
//If a property name on the Location object matches a field name
//of one of the submitted properties then mark the property as
//modified
if (pi.Any(prop => prop.Name.Equals(submittedField)) &&
!"ID".Equals(submittedField) )
{
db.Entry(location).Property(submittedField).IsModified = true;
sb.AppendLine(submittedField + "Value: " + db.Entry(location).Property(submittedField).CurrentValue );
}
}
LogUtil.WriteCondensed(sb.ToString());
//Save changes to the database
db.SaveChanges();
return RedirectToAction("Index");
}
return View(location);
}