Ah, but DataEntityBase
does have a nested EntityPropertyNames class; it's just that it gets it from Entity (which it inherits) which gets it from EntityWrapper (which Entity inherits).
If you were explicitly to define an EntityPropertyNames class in DataEntityBase, then that explicitly defined class would shadow the one that DataEntityBase inherits.
The idea here is that at any level in your hierarchy where you define properties, you may want also to define corresponding EntityProperyName constants; and you want anything that subclasses your class to get its set of EntityPropertyName constants as well.
If you were to define some properties in your DataEntityBase class, then all types that subclass DataEntityBase would get those properties by inheritance. Similarly, if you were to define some constants in your DataEntityBase.EntityPropertyNames class, then all types that subclass DataEntityBase.EntityPropertyNames would get those constants by inheritance. But that would not be the case if the EntityPropertyNames class associated with your final type didn't inherit from DataEntityBase.EntityPropertyNames.