The NDO architecture is completely transparent. It's not visible to the developer that the NDO classes are persistent. The only sign is the persistence attribute.

public class employee
    string first_name;  // persistent field
    string last_name; // persistent field

But your application needs some central point which you can use to save or retrieve objects and manage the persistence concerns. The class PersistenceManager is responsible for all these activities. It is the most important of the few NDO classes you need to know. The Persistence-Manager communicates with a persistence handler which stores and retrieves data from different data sources. There is one standard SqlPersistenceHandler for all persistent classes and one for all intermediate tables that might be necessary in conjunction with relations.

If you have some experience with ADO.NET, you can also write your own PersistenceHandler. Such a handler must implement the IPersistenceHandler interface. Furthermore an implementation of IMappingTableHandler is needed to read and write relation table entries.

The SqlPersistenceHandler uses an NDO Provider to instantiate concrete implementations of DbDataAdapter, IDbCommand, IDbConnection, and so on. It connects NDO with a specific ADO.NET provider. It is very easy to write an NDO Provider for a certain database product. NDO ships providers for Sql Server*, MySql* (=MariaDb), SqlCE*, Sqlite*, Oracle*, Firebird*, and Postgre*. (* Some of the product names mentioned are registered trademarks of the owners of the products.)

You can find the source code of our providers in the NDO repository.