Ubik

Ubik is a persistence framework that has object relational mapping (ORM) capabilities, for thesupport of domain models in highly interactive client-server applications.
* Client-server design: Although there are many ORMs now available for the .NET platform, few of them serve the needs of client-server applications built for the desktop using Windows Forms. Ubik can be used in any application context from service to website to rich client, however it excels when the client and server are separated. The carefully layered architecture, local object caching, single-round-trip commits and useful data update events are but a few of the features that make developing sophisticated, user-friendly distributed applications a pleasure.
* Object-oriented query language: Ubik supports (a useful subset of) the OPath query language, so that an object model rich with associations and inheritance can be queried in a simple and natural manner. The OPath expression syntax is closer to C# than SQL and so fits naturally into C# applications.
* Predictable behaviour: Ubik has been designed with logically-complex applications in mind, and a great effort has been made to avoid unpredictable behaviour. Queries executed in Ubik for example will return correct results in the context of the local transaction. New objects not yet stored in the database will appear if they match the query, and locally-changed objects will be included or excluded based on their current state.
* Minimal boilerplate code: Ubik is unobtrusive. A careful tradeoff between functionality and overhead has been made so that while some extra code is required when implementing business objects, repetitive code is minimised.
* Useful examples: An important goal of the Ubik project is to provide a 'real world' working example, to show not just how the API is used but how Ubik can fit in to a layered architecture including complex user interface interaction.
* .NET 2.0: Built from the ground up in C# on .NET 2.0, the Ubik API is clean and modern. Nullable types and generics are used where appropriate. Everything from compilation to deployment is simple and easy.

Go to http://ubik.tigris.org/

See also these related projects.