Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

EF4 Update Entity Without First Getting Entity

How can I update an entity without having to make a call to select it. If I supply the key for the entity, should it not know to update after SaveChanges() is called on the ObjectContext.

I currently do this:

var user = context.Users.Single(u => u.Id == 2);
user.Username = "user.name";
user.Name = "ABC 123";
context.SaveChanges();

That works, but forces a select. Because I know the Id, why can't I do something like this:

var user = new User();
user.Id = 2;
user.Username = "user.name";
user.Name = "ABC 123";
context.UpdateObject(user);
context.SaveChanges();

Thanks in advance.

EDIT: Also, it's important that only the affected properties that are changed be updated. Is this possible?

like image 756
TheCloudlessSky Avatar asked Jul 08 '10 13:07

TheCloudlessSky


2 Answers

Maybe following code work fine.

var user = new User();
user.Id = 2;
context.Users.Attach(user);

user.Username = "user.name";
user.Name = "ABC 123";

context.SaveChanges();
like image 132
user386740 Avatar answered Nov 02 '22 02:11

user386740


You can do this in a somewhat artificial way, by adding the entity and changing the EntityState to Modified:

var user = new User();
user.Id = 2;
user.Username = "user.name";
user.Name = "ABC 123";

context.AddToUsers(user);
ObjectStateEntry userEntry = context.ObjectStateManager.GetObjectStateEntry(user);
userEntry.ChangeState(EntityState.Modified);

context.SaveChanges();

In this way you will be telling the ObjectContext to find an entry with Id = 2 and update it rather than adding a new entry to the database.

like image 25
Yakimych Avatar answered Nov 02 '22 02:11

Yakimych