User:Alexyakunin/DataObjects.Net

DataObjects.Net is rapid database application development framework.

It combines business logic layer (BLL) development library, object-relational mapper (ORM) and a set of storage providers allowing the same BLL code to work transparently on any of them. Besides other features, DataObjects.Net has built-in embedded database.

DataObjects.Net is open source product available under GPL and commercial licenses. The most current version is 4.0 beta.

History
First version of DataObjects.Net was designed in 2003 by a small team of developers. Initially it was targeted to be used in rather special set of cases, mainly – in web-based document management systems, but further it has evolved into general purpose object-relational mapping framework.

In 2007 it won Reader's Choice Award in dot.net Magazin.

Brief revision history:

v1.X (July-December 2003)

 * Basic persistence and mapping features.
 * OQL-like queries
 * Automatic transactions, "Unit of work" pattern implementation based on nested transactions
 * Paired properties
 * Translatable properties
 * Automatic schema upgrade
 * Integrated full-text indexing and search
 * Serialization.

v2.X (January - December 2004)

 * Per-object, access control list (ACL) based access control and security system
 * Value types (struct-like objects), ValueTypeCollection
 * Adapter for conversion to and from DataSets
 * BindingManager for ASP.NET
 * Other improvements include persistence of delegates, possibility to use IFilter in full-text indexing, reacher query language.

v3.X (January 2005 - December 2008)

 * .NET Framework 2.0 support
 * Query profiler, profiling API
 * Versioning mode allowing to browse the state of entities at any previous moment of time in read-only mode
 * Offline (disconnected) entities
 * Global cache: caching of entities across all the sessions
 * Table partitioning support. There are "emulated" and "native" modes, the last one relies on built-in capabilities of RDBMS.
 * Built-in full-text search engine can use Lucene.NET
 * Public API for entity state change and session event tracking
 * Better integration with ASP.NET and Windows Forms.

Currently this branch is supported by developers, bugs are fixed, but no new features are added.

v4.X (first preview in September 2008; final release in June 2009)
Finally the team of developers has made a decision to completely redesign the framework. New implementation is known as DataObjects.Net v4.0. Works on this version were started in December 2006. In September 2008 v4.0 was publicly shown for the first time, although some features (LINQ, schema evolution) were missing in it yet. DataObjects.Net v4.0 final will be released in June 2009.

Features

 * High level of storage independence. DataObjects.Net allows to transparently migrate between SQL database and index storages, providing:
 * Built-in embedded database supporting all the framework features including indexes and LINQ allows to use the product without third-party SQL database at all.
 * Built-in in-memory database (IMDB) allowing to use LINQ queries and indexes on the client and simplifying unit testing.
 * Relying on PostSharp to implement persistent properties and override persistent object's behavior in AOP fashion.
 * Object-relational mapping layer providing support for:
 * Automatic creation and upgrade of the database schema. The upgrade process is highly customizable. Original data is either kept, transformed, or moved to so-called recycle types to be used in custom upgrade handlers.
 * Class mapping: the framework supports 3 common mapping strategies: class to table, class to concrete table, hierarchy to table.
 * Interface mapping: DataObjects.Net is capable of mapping interfaces to materializing tables, as well as to ordinary tables, to which Entities implementing the interface are mapped. Materializing tables can be indexed.
 * Structures: struct-like objects that Entities may aggregate.
 * Arbitrary primary key types, combined primary keys.
 * Transparent persistence. No necessity to call neither something like DataContext.Register(newEntity) nor DataContext.Save -like methods.
 * Indexes.
 * LINQ.
 * Business logic related features:
 * "Unit-of-work" pattern implementation, error compensation.
 * Master-slave and P2P synchronization scenarios between storages running DataObjects.Net.
 * Performance: framework caches query compilation and optimization results, pre-compiled expressions, fetched entities and utilizes some other performance optimization techniques.
 * .NET Framework 3.5 support.

Available providers

 * Microsoft SQL Server
 * PostgreSQL
 * VistaDB
 * Built-in in-memory database provider