I'm not sure I understand the exact process that you're going through here of the end goal you are looking for, but I'll try to lay out a few scenarios
In our system, we have three types of users that all inherit from a base user class. The different user objects behave a bit differently in a few situations. We just call...
Code:
session.Get(GetType(UserBase), id)
This instatiates a user of type User, Admin, or Application according to the type of the user in the database, but returns the instance cast as UserBase. Our entire application only has references of type UserBase. The application doesn't care what type of user it is so long as the correct implementation is called when user.CanEdit(document) is invoked. In those rare situation we really really need to know what type the user is, a trycast or typeof work wonders. If I understand why you're asking this question, this is probably the best solution.
The problem with just about any other solution is that your code throughout the application needs to be sensitive to the fact that your repository(ies) might be returning objects cast to different types. This can be difficult to maintain as time goes on, but in case I didn't understand the end goal here's a couple more suggestions.
If I wanted to receive a user from the database typed as Admin, I would probably write a new AdminRepository and add a get call similar to above but with type Admin. Then in the application I would need to change all my code in the places where I specifically want to deal with Admins.
Another method that comes to mind would be to write a generic method into the repository class that asks for the type that you want returned along the same lines as the IQuery.List<of T>() method in the NHibernate framework. The call would then be something like
Code:
Dim user As Admin = UserRepository.ReadUser(Of Admin)(32);
Again, because both the variable and the method call contain a specific type, you need to make this sort of call anywhere you need an Admin typed user.
That's all I got for ya at the moment. Good luck. Let me know if you have any other questions.