Nothing stops you from making the create factory public on a child object. Really, being a child object only blocks the Save() from working - technically you can have public create and fetch methods on a child with no problem (though I think having a public fetch could have other bad side-effects on design).
There are good reasons why you might want to use the create-and-add model for child objects, rather than the created-by-collection model I show in the book, and there's no real issue in doing that - nor do you need to go to all the complexity of making your object a switchable object.
In your child class, just implement a public factory for creation. Then implement DataPortal_Create() to initialize/load defaults. Call MarkAsChild() in the ctor as normal. This allows the UI (or any other code) to create these objects at will.
Then you can just use the pre-existing Add() method on the collection to add this new item. BusinessListBase will automatically set the edit level and parent reference on the new object.
Then the insert operation will be automatically handled when you save the collection, because the object is just like any other new child at that point.
Copyright (c) Marimer LLC