According to MSDN, a hash function must have the following properties:
If two objects compare as equal, the GetHashCode method for each object m
It doesn't need to be based only on immutable fields. I would base it on the fields that determine the outcome of the equals method.