Вы не упоминаете, как вы определили UserInfo, это структура или класс?
Если это структура, возвращение ее из GetUser создаст новый объект, и, таким образом, вы не будете обновлять объект базы данных, только его локальную копию.
Перемещение встроенного GetUser позволяет избежать создания временной копии, и, вероятно, именно поэтому оно работает.
afaik вы могли бы сделать что-то вроде
public void GetUser(int id_, out UserInfo user_)
{
user_ = db.UserInfos.SingleOrDefault(d => d.Id == id_);
}
Вы бы тогда назвали это так
public void UpdateUser(UserInfo user_)
{
UserInfo origUser;
GetUser(user_.Id, out origUser);
origUser.First = user_.First;
origUser.Last = user_.Last;
origUser.City = user_.City;
origUser.Country = user_.Country;
origUser.State = user_.State;
origUser.Street_Address = user_.Street_Address;
db.SubmitChanges();
}