Willy
Willy

Reputation: 1729

EF Update using EntityState.Modified

Usually I'm using this code

Member member = ctx.Members.Find(id);
member.Name = txtName.Text;
ctx.Entry(member).State = EntityState.Modified;
ctx.SaveChanges();

When I want to update the model using entity framework. I found an example on SO that doesn't use EntityState.Modified to update the model. I try to remove the line and it's still working. What is the pros and cons use EntityState.Modified and doesn't use EntityState.Modified?

Notes: I'm using Entity Framework 6 Code First in WinForms

Upvotes: 13

Views: 16193

Answers (3)

paulpitchford
paulpitchford

Reputation: 560

Like the other guys have mentioned your context tracks the changes to the object automatically.

I find it more useful for instance when I use return json to a mvc controller where the original object loses change tracking when first converted to json for the view. In that case I have to specifically set the objects entity state before saving changes.

Upvotes: 4

Yooz
Yooz

Reputation: 2518

The EntityState.Modified is useless in your case because the entity your are updating is already tracked by the context as you retrieve it from the context.

You would need it in the following scenario where you don't retrieve your entity from the context :

Member member = new Member({Id=1, Name="member"}) ;
context.Entry(member).State = EntityState.Modified; 
context.SaveChanges();

Also, as specified in previous answer, your context sometimes tracks only a limited "view" of the database and therefore you need to init the tracking manually like above.

Microsoft doc

Upvotes: 19

avestnik
avestnik

Reputation: 150

If you are using change tracking then proxy objects listen to properties changes and update context automatically which is quite useful in mvvm where you just bind properties to controls and don't have to write code behind to update context

If you are not using change tracking (for example when you are dealing with large amount of entities) you have to update context yourself

Upvotes: 2

Related Questions