What is the life-cycle of the data-context? Is it the same data-context, or a new one each time? (it should probably be the latter).
If you re-use a data-context, it is obliged to always give you back the same object when ever it seems the same identity. So if it has previously given you the version with 9, it'll keep giving you back that reference even when the underlying data changes.
At the moment, this still does a round-trip; to avoid the round-trip, you need to use:
var obj = ctx.SomeTable.Single(x=>x.Id == id);
i.e. if it already has the object with Id == id
in the local identity cache, it won't perform a databae query at all.
any other construct will do a round trip. There is a fix in 4.0 so that .Where(x=>x.Id == id).Single()
will avoid the round-trip, which should have with query syntax, i.e.
var obj = (from x in ctx.SomeTable
where x.Id == id
select x).Single();