2

私はこの質問を投稿しましたが、実際の質問を上書きしてコードを投稿しただけで、クローズすることが投票されました。私は質問がかなり熱狂的で、公正な揺れがなかったと思ったので、もう一度投稿します.

Entity Framework 4.1 を使用しています。かなりの数のフィールドがあるフォームがあります。テーブル自体には、実際にはフォームにあるものよりも多くのフィールドがあります。変更されたフィールドだけを更新する方法を見つけようとしています。ここでその例を見つけました:

EntityFramework の部分モデルの更新

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);
    }
4

1 に答える 1