7

小さな ASP.Net mvc3 アプリケーションがあり、編集部分にいます。デフォルトのテンプレートがあります:

public ActionResult Edit(int id)
{
    User user = db.Users.Find(id); 
    return View(user);
}

public ActionResult Edit(User user)
{
    //(Here access to old user name for example)
    db.Entry(user).State = EntityState.Modified;
    db.SaveChanges();
}

user.name を実行すると、新しい値がありますが、保存する前に db 値にアクセスしたいと思います。

ありがとう !

4

5 に答える 5

12

ちょっとしたトリックでうまくいきました:

db.Users.Attach(user);
var current = db.Entry(user).CurrentValues.Clone();
db.Entry(user).Reload();
//Do you user(from db) stuff
db.Entry(user).CurrentValues.SetValues(current);
db.Entry(user).State = EntityState.Modified;
db.SaveChanges();
于 2012-06-08T12:45:34.773 に答える
2

context.Entry(YourEntity).GetDatabaseValues().ToObject() as YourEntity

于 2015-09-26T22:42:19.213 に答える
0

これはどう:

public ActionResult Edit(User user)
{
    User oldUser = db.Users.Find(user.id);
    // oldUser object represents the user before the modification
    ...
    db.Entry(user).State = EntityState.Modified;
    db.SaveChanges();
}
于 2012-06-07T17:26:31.130 に答える
0

古い値と新しい値を別々に取得したい場合:

 //user.UserName = "oldtest"     
 user.UserName = "Test"     
 var originalValues = db.Entry(user).OriginalValues.Clone();
 var originalval = originalValues.GetValue<string>("UserName");
 var currentvalue = db.Entry(user).CurrentValues.Clone();
 var curretval = currentvalue.GetValue<string>("UserName");

これは、新しい UserName を「oldtest」として設定する前に、originalval を古い値として返し、curretval は新しい UserName を「Test」として返します。

于 2017-03-29T07:17:40.270 に答える