Well, if you assign a property, then the Entity Framework will presume you know what you're doing and update it. You're saying that the user changed only one field, but I'm not sure how either MVC or the Entity Framework is supposed to know that, of all the keyvalue pairs in the POSTed HTML form, only one was actually changed by the user. You are saying, in your question, that "the values have not been changed," but in your comments on @jchapa's answer you say that "not all information is the same." This suggests that the actual issue is not with what the Entity Framework is doing, but rather what you are telling it to do.
I think that perhaps you are looking for a solution in the wrong place.
If your real problem is that the model passed to the action contains fields which the user can never change and which should never be updated (perhaps because they are not actually on the form at all), then you can pass a whitelist to TryUpdateModel
.
If your real problem is that another user might have changed the Person
instance between the time the user issued a GET request for the form and the time the user POSTed her changes, then you can add a TIMESTAMP field to the table and set fixed concurrency mode on it.