News, examples, tips, ideas and plans.
Thoughts around ORM, .NET and SQL databases.

Tuesday, February 05, 2013

DataObjects.Net in 2013 roadmap

This post will cover our plans for DataObjects.Net in year 2013.

Feature update for DataObjects.Net 4.6

Unlike typical bug-fix-only minor releases. DataObjects.Net 4.6.4 will include
several new features.

Support for ignoring certain tables and columns during upgrade

This is essential feature for using technologies such as SQL Server Replication that require special columns to be present in each table.

Support for external 'recycled' definitions

As you know, it's possible to mark certain types and/or fields as recycled to keep corresponding data (tables, columns) available during upgrade. However, this requires keeping some legacy items in your code. External recycled definition will solve this problem by providing an API to add recycled definitions via UpgradeHandlers.

Support for :memory: data source in SQLite provider

SQLite provides special :memory: data source that could be used to operate against in-memory database. This is extremely useful for instance, for testing purposes as the database disappears once connection is closed. Currently, DataObjects.Net requires separate connections for building domain and regular CRUD operations which makes :memory: data source inapplicable. DataObjects.Net 4.6.4 will include support for this data source, limiting one active session per domain.

DataObjects.Net 4.6.4 is expected to be released in March 2013.

Plans for DataObjects.Net 4.7

This is not final roadmap for DataObjects.Net 4.7. Things might change, but here is our current plans.

New faster tuple implementation

DataObjects.Net internally uses special data structure to store Entity fields called Tuple (not to be confused with .NET Framework 4 tuples). Versions prior to 4.7 used set of generic types to store and access tuple fields. Due to the startup slowness of generics and additional memory consumption we switched to non-generic approach that provides more efficient data storage as well as fast typed access. This feature is already implemented and will be included in DataObjects.Net 4.7

Support for reading entities after session has been disposed

This feature would simplify passing entities in ASP.NET MVC and other similar applications.

Automatic caching of generated SQL queries

LINQ translation might take considerable time. DataObjects.Net provides compiled queries to address this. However sometimes it's desirable to cache translation result of each LINQ query. This would be available as an option. By default generated SQL queries will not be cached.

Query result caching API

This is one of the most wanted DataObjects.Net features. We will provide an API to maintain cache of LINQ query results as well as examples how to integrate DataObjects.Net with memcached and other caching facilities.

Change of a default Transactional aspect application

At the moment all your persistent types (i.e. entities, services derived from SessionBound) are powered with our Transactional aspect. This means they automatically provide transaction and activate session upon calling any of their methods. This adds some overhead and most of the users like to manage transactions manually. Thus we decided to remove automatic application of  Transactional aspect in DataObjects.Net 4.7. For those who will need current behavior it would be possible to enable it again by adding special attribute on each assembly with persistent types.

Improved support for native SQL data types

Currently DataObjects.Net supports persistence of standard .NET primitive types and spatial types of SQL Server. We are going to improve this and add support for spatial types in PostgreSQL as well as XML data types for servers that support them. Also operations on such types would be supported by LINQ translator.

Improved logging API

At the moment DataObjects.Net logging is complex to configure.
We're going to change this and provide new more simple interface for it. Also it would be possible to plug your own log consumers.

Reworked validation framework

We're going to improve our validation framework to make it more easy to use and extend with your own validators.

Support for SQL Server Compact 4

SQL Server Compact 4.0 will supported in addition to 3.5

DataObjects 4.7 is scheduled for release in September 2013.

Monday, February 04, 2013

Product lifetime policy update

There was no clear policy on DataObjects.Net product lifetime in the past. Now we define such policy. Each major DataObjects.Net release is supported for 18 months. Within this period we will accept bug reports and make bug-fix releases. After product lifetime expires you might still use it "as is". Certain versions might have this period expanded with proper announcement.

Currently we support 3 major DataObjects.Net releases: 4.4, 4.5 and 4.6.

The following table shows when they would go out of support:
  • 4.4    April 2013
  • 4.5    October 2013
  • 4.6    April 2014
As a special exception we extended 4.4 lifetime to make it easy to migrate to newer versions.
The last 4.4 release will be available in April 2013.

DataObjects.Net 4.5.7 and 4.6.3 are released

This is a huge bug-fix release. Everybody is encouraged to upgrade.

DataObjects.Net 4.5.7 and 4.6.3:

DataObjects.Net 4.6.3 only:

  • Fixed incorrect column order in queries after certain schema upgrades
  • Added DomainConfiguration.NativeLibraryCacheFolder setting
  • Significantly improved initialization time for Xtensive.Tuples infrastructure

DataObjects.Net Extensions 4.6.3 and 4.5.7:

Bulk operations extension
  •  Remove extra command execution under certain scenarios
Reprocessing extension
  • Improve compatibility with DisconnectedState
  • Don't use nullable types in ReprocessAttribute properties

DataObjects.Net Extensions 4.6.3 only:

Localization extension
  • Improved examples in readme.txt
Tracking extension
  • Fixed incorrect handling of partially loaded entities

DataObjects.Net LinqPad driver 4.6:


Just as always releases are available at our site and NuGet gallery.