0

現在のプロジェクトでは、すべての値がアプリケーションで変更されるテーブルに書き込む必要があります。元。男はUserNameを更新します。テーブルUserNameの古い値「1」新しい値「2」に入れる必要があります。

ObjectStateEntry を使用しようとしましたが、これはすべてのフィールドを返します。私のコードのせいで、FWはすべて戻ってくると思います。

public USER Save(USER obj) 
        {
            using(TPPTEntities db = new TPPTEntities())
            {
                db.Connection.Open();
                USER o = (from n in db.USERs where n.ID == obj.ID select n).FirstOrDefault();
                if (o == null)
                {
                    o = new USER()
                    {
                        BruteForce = 0,
                        Email = obj.Email,
                        IsBlock = false,
                        LastLogin = DateTime.Now,
                        Name = obj.Name,
                        UserName = obj.UserName,
                        UserPassword = new byte[0],

                    };
                    db.AddToUSERs(o);
                }
                else
                {
                    o.Email = obj.Email;
                    o.Name = obj.Name;
                    o.UserName = obj.UserName;

                }
                db.SaveChanges();
                db.Connection.Close();
            }
            return obj;
        }
4

2 に答える 2

1

古い値と新しい値を取得する方法は次のとおりです。

var ose = this.ObjectStateManager.GetObjectStateEntry(o.EntityKey);
foreach (string propName in ose.GetModifiedProperties())
{
    string.Format("Property '{0}', old value: {1}, new value: {2}",
        propName, ose.OriginalValues[propName], ose.CurrentValues[propName]);
}

foreachもちろん、これはかなり役に立たないですが、変更を保存するためにループで何をすべきかを知っていると確信しています。

于 2012-04-30T15:11:03.077 に答える
0

これは WCF サービスですか? その場合、オブジェクト コンテキストが使用できない場所でオブジェクト グラフへの変更が行われるため、変更が反映されることはおそらくありません。自己追跡エンティティの使用を検討する

于 2012-04-27T16:28:33.070 に答える