AFetter
AFetter

Reputation: 3584

Detect Change in EntityFrameWork

In my current project I need write in a table all values are changed in the application. Ex. the guy update the UserName, I need put in a table UserName old value "1" new value "2".

I tried use the ObjectStateEntry but this return all fields. I think the FW return all because my code.

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

Upvotes: 0

Views: 625

Answers (2)

Gert Arnold
Gert Arnold

Reputation: 109080

A way to get old and new values is this:

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

This is pretty useless, of course, but I'm sure you'll know what to do in the foreach loop to store the changes.

Upvotes: 1

S P
S P

Reputation: 4643

Is this a WCF Service? In that case, the changes will probably never come trough since changes to the Object Graph are made where the Object Context is not available. Consider using Self-Tracking Entities

Upvotes: 0

Related Questions