Below is a list of the main features of the eXpress Persistent Objects for .NET.
Transparent and Controllable Object Relational Mapping System - By using .NET Reflection and attributes introduced by XPO, XPO is able to map the properties of business objects to relational database tables. Object associations (one-to-one, one-to-many, many-to-many), aggregation and inheritance are all FULLY supported.
Persistent Class Generation - XPO can generate persistent classes that replicate the specified database's structure. This allows easy transition from traditional relational databases to eXpress Persistent Objects.
Bindable and Pageable Object Collections - With XPO, you can retrieve collections of persistent objects, paginate and bind them to UI controls with ease.
The XPView class can query arbitrary combinations of calculated and aggregated values from the object model. It can be used with data binding, providing a good alternative for situations where memory consumption and speed need to be optimized.
Advanced Support for Existing Database Schemas - XPBaseObject can serve as a base class for persistent objects, allowing you to map such objects to an existing database without having to make any modifications whatsoever to the database structure.
A shareable statelessdata access layer (DAL) speeds up the process of session creation considerably, allowing for better performance and simpler implementations in ASP.NET and other scenarios where short cache life spans are desirable.
Comprehensive Database Generation and Updates - XPO allows you to generate or update database tables based on the definitions of your persistent object classes.
Support for various DB engines - XPO provides built-in support for MS Access and MS SQL Server databases, as well as for MySQL, Oracle, PostgreSQL, Firebird, PervasiveSQL, VistaDB, SQL Anywhere, Advantage, DB2, SQLite, and Sybase. This means you can target these database engines without having to make any modifications to your code.
SqlDependency Support - XPO fully supports SqlDependency. This feature (found in Microsoft SQL Server 2005 and later) enables the data server to send data change notifications to client applications. By using this feature, applications that cache data can determine when they need to refresh their cache.
XML Model with Custom Attributes - XPO uses an abstract metadata model instead of .NET Reflection. .NET Reflection metadata can be obtained by means of the ReflectionDictionary, which is used by default. The XPDictionary class and all its descendants including the ReflectionDictionary have the ability to supply XML data specifying mapping information and custom attributes for modifying the data accumulated via .NET Reflection.
Dynamic runtime extension of persistent classes is also powered by ReflectionDictionary. It allows creating the data model structure on the fly, without declaring any .NET classes in code, which gives additional flexibility.
Session-less persistent classes don't need to be derived from the XPObject to be handled by XPO.
The XpoDefault class stores global settings like a connection string or a shared DAL, and simplifies the implementation of multi-session applications.
Advanced Criteria System - A wide set of criteria operators allow you to build complex criteria representing the logical expressions used to retrieve objects from the database, including the aggregate operations.
Delayed Loading for Object Properties - With XPO, you can improve application performance by delaying the loading of particular properties, such as those which are used rarely or contain large amounts of data.
Transaction Support - XPO provides transaction support in the same way that Microsoft ADO.NET does. You can easily Begin a transaction, then Commit or Roll it back using appropriate Session methods.
Using the Unit of Work principle, XPO can perform semi-automatic change tracking. The only requirement for this is that your property setters call SetPropertyValue.
Nested Units of Work are supported. These encapsulate certain operational blocks and can be committed or rolled back at once, within the parent's scope.
Custom Oid - A class property (of any supported data type) annotated with the KeyAttribute is treated as a key. Key auto-generation is supported for Int32, Int64 and Guid data types.
Precise Definition of the Column Type the Persistent Property or Field is Mapped to - The DbTypeAttribute can be used to designate a provider-specific database type for the column which the persistent property or field is mapped to.
Explicit Declaration of a String Field of Unlimited Size - Unlimited Text/Memo field size can be defined by specifying the SizeAttribute.Unlimited constant.
Custom Type Converters - Transparent conversions of persistent property values from/to database values can be implemented using type converters, for example, for security purposes.
C# Builder, Borland Delphi .NET, Mono Support - XPO is fully compatible with the Borland C# Builder, Borland Delphi.NET and the Mono C# compiler.
Session and XPCollection Components - These components allow you to set the DataSource, and bind it to any visual component such as a grid control, edit control or any other data-aware controls at design time.
IBindingList Collection Behavior - The XPCollection supports the IBindingList and you can add or remove collection items via this interface at run time.
Custom Constraints and Indexes - Advanced metadata attributes allow you to specify database constraints and indexes for persistent properties or fields. By handling the Session.SchemaInit event of the Session object, you can enforce any custom database modifications.
IEditableObject XPBaseObject Behavior - XPBaseObject supports IEditableObject and you can control the object's changes via this interface.
Advanced Event System - In order to perform custom actions during object, collection and session manipulations, you can employ the events raised when the session / transaction state or collection contents are changed, or the underlying database metadata for the object is about to be modified.
Database Integrity Validation - XPO keeps the underlying database up-to-date and integrated automatically, unless you choose to disable this functionality.
Performance Counters - Microsoft Windows® provides a Performance Monitor which helps indicate resource usage using a real-time chart. You can choose which values (Performance Counters) are to be tracked and view them over time. If needed, you can use this tool to analyze XPO performance. If XPO is installed on a machine, you can see DevExpress.XPO among other Performance Counter categories.
XPO Profiler - A tool that allows you to look under the hood of XPO and evaluate every Session method call and database request executed in your applications.