HiveBrain v1.2.0
Get Started
← Back to all entries
patterncsharpCritical

Entity Framework 5 Updating a Record

Submitted by: @import:stackoverflow-api··
0
Viewed 0 times
entityupdatingrecordframework

Problem

I have been exploring different methods of editing/updating a record within Entity Framework 5 in an ASP.NET MVC3 environment, but so far none of them tick all of the boxes I need. I'll explain why.

I have found three methods to which I'll mention the pros and cons:

Method 1 - Load original record, update each property

var original = db.Users.Find(updatedUser.UserId);

if (original != null)
{
    original.BusinessEntityId = updatedUser.BusinessEntityId;
    original.Email = updatedUser.Email;
    original.EmployeeId = updatedUser.EmployeeId;
    original.Forename = updatedUser.Forename;
    original.Surname = updatedUser.Surname;
    original.Telephone = updatedUser.Telephone;
    original.Title = updatedUser.Title;
    original.Fax = updatedUser.Fax;
    original.ASPNetUserId = updatedUser.ASPNetUserId;
    db.SaveChanges();
}


Pros

  • Can specify which properties change



  • Views don't need to contain every property



Cons

  • 2 x queries on database to load original then update it



Method 2 - Load original record, set changed values

var original = db.Users.Find(updatedUser.UserId);

if (original != null)
{
    db.Entry(original).CurrentValues.SetValues(updatedUser);
    db.SaveChanges();
}


Pros

  • Only modified properties are sent to database



Cons

  • Views need to contain every property



  • 2 x queries on database to load original then update it



Method 3 - Attach updated record and set state to EntityState.Modified

db.Users.Attach(updatedUser);
db.Entry(updatedUser).State = EntityState.Modified;
db.SaveChanges();


Pros

  • 1 x query on database to update



Cons

  • Can't specify which properties change



  • Views must contain every property



Question

My question to you guys; is there a clean way that I can achieve this set of goals?

  • Can specify which properties change



  • Views don't need to contain every property (such as password!)



  • 1 x query on database to update



I understand this is quite a minor thing to point out but I may be mi

Solution

You are looking for:

db.Users.Attach(updatedUser);
var entry = db.Entry(updatedUser);
entry.Property(e => e.Email).IsModified = true;
// other changed properties
db.SaveChanges();

Code Snippets

db.Users.Attach(updatedUser);
var entry = db.Entry(updatedUser);
entry.Property(e => e.Email).IsModified = true;
// other changed properties
db.SaveChanges();

Context

Stack Overflow Q#15336248, score: 691

Revisions (0)

No revisions yet.