They you have to be more specific because you said:
The first field is the PK, and the second is the discriminant column used to create two specific Type entities - TypeA and TypeB (TargetPerEntityHierarchy). The third field is description. Now imagine I have a SomeData table with one field being a FK onto TypeA. I have created the relation in the designer as well.
You defined a FK constraint, which can only be using the table which contains all the types. Hence my conclusion the actual relation is between the root type of the hierarchy and SomeData.
What's unclear to me is what's the exact hierarchy of the types in Type ?
Because if you have this:
RootType <- A
RootType <- B
and NO FK between SomeData and Type, you can then define a relation between SomeData and A. This gives a field mapped onto the relation in SomeData, lets call that field A. This gives thus a property in SomeData's entity of type A. You then can't set that property to an instance of B as that's not compilable code
However, as it's described in the concepts section of the documentation: if you want a specific relation between a subtype and another type, use a hierarchy type of TargetPerEntity, simply because it's undoable for the code to check if an FK is really valid, because it would come down to the fact that it has to perform FK-style checking on a related table when an update occurs, while you get that for free when you use a different hierarchy type: TargetPerEntity.