Otis--
Regarding this...
Otis wrote:
...I don't know the Liskov Substitution Principle so I haven't studied it...
...I see what you are saying.
However, to follow that up kindly and respectfully, I would suggest that you DO know LSP. I should rather say you have co-discovered LSP informally and applied it as you see necessary/practical, which is fine IMHO. That is exactly what I contend most people do; (see my objections to LSP above).
As proof that LSP is applied (to some extent) in LLBLGen is given by the fact, for example, that some LLBLGen objects DO expose/override methods of their ancestors.
Take, for example, the DataAccessAdapter...
InheritanceOne.Dal.Adapter.DatabaseSpecific.DataAccessAdapter >>> SD.LLBLGen.Pro.ORMSupportClasses.DataAccessAdapterBase >>> System.Object
...it is no coincidence that both DataAccessAdapter and System.Object have ToString(), Equals(), and GetType().
My theory is that you did apply LSP, whether or not you explicitly knew it to be LSP.
There are a lot of decent papers on LSP out there. As with all software design theory, some are idealist, purist, pie-in-the-sky, ivory-tower and others are more practical, sane, and useful.
As usual, it is theoretical-science versus applied-science.
And, again as usual, applied-science pays the bills and makes the wheels turn.
(I just want to be clear that I am in the applied-science camp.)
Anyway, I hope you take this all in stride, as I am sure that you will. Please know that the only reason I bring this kind of thing up for discussion is that I know I have a lot to learn from you (and the whole LLBLGen support team). So, that's what I am trying to do.
Thank you, again, for you kind responses and your excellent product.
--Mark Kamoski