Recomendations on where to set an object properties (Repository Pattern)
Part of the goal for using the Repository pattern is to separate the storage from the domain.  By passing the IDataReader in to a Foo object, I feel like the domain gains too much knowledge of the underlying storage mechanism.

So, between the options listed, I prefer setting the object's properties in the Repository.  That being said, if the object doesn't make sense without a certain property, it should still demand it during its creation.  However, even in this case, the Repository would still be responsible for setting all the properties requested.