In a software system a one-to-one relationship must be modeled between two objects where an active status exists for the relationship.
In other words, ObjectA has a one-to-one relationship to ObjectB (without a back pointer) where the relationship can be either active or inactive. There might also be additional attributes associated with the relationship.
What is the best way to model this scenario using object orientation in .NET?
It depends if the activation of a relationship is part of the behavior of the system you want to model.
So that sounds like you would want to model more than just a reference. The a containing instance of b will work in simple situations, where the relationship is not part of the behavior of the system, but just a technical implementation.
If you want to activate/deactivate/activate (without knowing/remembering the objectB activated), the ‘null modeling’ will not work (because you would have lost the reference, and you would lose the information about the relationship). Or for instance where, at a later stage, you would want to reactivate the relationship, without a reference to both a and b, but to the relationship. So seeing the relationship as a first class citizen of the model.
You could then do something like this (but this could be complete overkill, and just to show a modelling of relationships as part of your domain):
(source: googlecode.com)
The objectA uses an ObjectB proxy, that will act as an ObjectB, but it actually has a reference to the unidirectional relationship to ObjectB. The ObjectB proxy can implement behavior on what to do when the relationship is not active.
In code: