Object/Relational mapping framework leveraging ADO.NET`s powerful disconnected mode. Supports an effective object query language based on relational operators including join.
Adoor.Net is a .NET 2.0 framework based on both Eldorado.Net project and ObjectBroker project. Although it inherits many aspect from Eldorado, it also add several improvements (namely strongly typed collections).
ADOOR was used sucessfully on several middle size .NET projects ranging from a few hundred to several thousand man days. There is quite a long time that opening the code was discussed and we finally made it.
This framework have been heavilly customized during years, and we try to make it usable by the mass.
Usabillity & Productivity
Nowadays several ORM library are available and some are quite good (hibernate). However most frameworks have a huge learning curve : you often have to understand the algorithm behind the scene to achieve descent performance.
ADOOR has taken a pragmatic approach by provinding a simple tool : it has far less mapping possibilities than advanced ORM, but it get 80% of the job done and provide tools to find work arrounds (indeed sometimes there is no need to load a full featured object
graph to display a simple label, etc...)
ADOOR was design to achieve productivity via ORM and it is especially well suited for heavy or smart client (it context based design make easy to implement cascading modal dialogs). Of course it can be used in web apps but it won't provide any advantage
over other good ORM solution (won't perform worse either).
ADOOR in action
- Provider pattern is central to the ADOOR design meaning that nearly all part of the framework can be customized and extended.
- Storage abstraction (either Database or XML)
- SqlServer, Oracle, MySQL, oledb or odbc datasources are supported
- Comes with a wizard tool that can generate code and/or DDL script from UML diagram (via XMI)
- Object-cache which
- reduces access to the database
- prevents unending loop reads when retrieving objects involved in a circular or bi-directional relationship
- is designed to be extended (provider pattern based).
- is transactionnal. It can start in-memory trasaction involving volatile resources
- Mapping support for 1:1, 1:n and m:n associations
- Support for polymorphism and extents via various pattern (single table inheritance, table inheritance, concrete table inheritance. default to concrete table inheritance)
- Designed to support cross database mapping (distributed transaction, cross domain queries)
- Primary key strategies handled via various provider
- Sequence managing with Id buffering (limit database access)
- Guid based provider
- Custom provider
- Optimistic concurrency support (pessimist offline lock and coarse grained locking strategies are planned)
- Collection are typed
- Entity live cycle is managed
- Object framework query support. In other words, it provides SQL query abstraction (it does logical to phycal file mapping during evaluation thus decoupling Queries from physical model)
- Tabular query results capabilities
- Automatic generation of insert, update, delete on trancsaction commit
- Stored procedures can use used in place of prepared statements.
- Lazy loading for object graph via ghost object pattern
- Object graph preloading can be enforced to prevent n+1 fetch problem.
- XML file based configuration to define the O-R mapping
- Transaction boundaries (units-of-work) defined by ObjectContext lifetime. Transaction management based on
System.Transaction (meaning either lightweigth transaction or COM+ transaction)
- Partial Design time experience in Visual Studio (in progress...)