Well, in your code, user.ID
includes the user id (if it was existed before, and of course if it's a new one). I'm not sure about that, but i think that SubmitChanges also automatically query the new ID of new records and fill the existing object identity property automatically, so in your case using user.ID won't cost additional query if you use it after the SubmitChanges (it'll be 0 if it's new record and you didn't call SubmitChanges)
But, if you want to use the id before calling SubmitChanges, the best way to define the 'ID' before adding it to the database is making the ID a uniqueidentifier on the database (System.Guid), and then simply inserting it with the GUID already defined in the INSERT statement.
Just notice that the insert could fail, and in that case you must make sure that if something went wrong anything you did while assuming user with the same ID as the Guid you're using exists will be rolled back.