2

アプリケーション機能のスキャフォールディング (CRUD) で生成されたすぐに使えるコードを使用する標準 MVC アプリケーションがあります。データに対して追加のタスクを実行するために、特定のフィールドが変更されたかどうかを評価しようとしています。どうやら、OriginalValues と CurrentValues が実際に実装されている方法ではないという私の考え (うーん!)。これを実現するために値を比較する方法についてのアイデアはありますか? 前もって感謝します...

    [HttpPost]
    public ActionResult Edit(Address address)
    {
        if (ModelState.IsValid)
        {
            string st1 = db.Entry(address).Property(p => p.locationTypeId).CurrentValue.ToString();
            //string st2 = db.Entry(address).Property(p => p.locationTypeId).OriginalValue.ToString();

            bool bLocationTypeChanged = false;
            db.Entry(address).State = EntityState.Modified;
            db.SaveChanges();

            // Other stuff happens here

            return RedirectToAction("Index");
        }

        ViewBag.locationTypeId = new SelectList(db.LocationTypes, "locationTypeId", "name", address.locationTypeId);
        return View(address);
    }
4

1 に答える 1

1
if (ModelState.IsValid)
{        
    foreach (var entry in db.ChangeTracker.Entries<Address>().Where(a => a.State != EntityState.Unchanged))
    {
        string st1 = entry.Property(p => p.locationTypeId).CurrentValue.ToString();
        string st2 = entry.Property(p => p.locationTypeId).OriginalValue.ToString();

        //Do your extra stuff based on your comparison here.... 
    }

ChangeTracker の各エンティティ エントリを調べて、EntityState を確認できます。あなたst1st2値の比較は、比較したい値を返すはずです。

于 2012-06-20T15:06:04.040 に答える