- Manual. It's still a work in progress, but I admit most important 80% of it are already written.
- Entity versions API: VersionInfo, [Version] attribute and a set of related classes allowing to track version changes and validate optimistic locking conditions.
- DisconnectedState API capable of switching any Session to true "offline" mode. DisconnectedState objects act as moveable and cloneable caches that can be attached to and detached from sessions. They can be serialized, are capable of providing optimistic locking for entities they cache, moreover, the operation log they maintain can be serialized and sent to another machine separately. So this is really a huge improvement enabling DataObjects.Net to operate in disconnected or occasionally connected scenarios.
- Full-text search working natively on MSSQL and PostgreSQL. Example queries are here; there is still no documentation for this feature, although its usage is really simple. Full-text search support isn't available for Oracle yet.
- Support for SQL Azure, SQL Server CE, Oracle and standard connection strings.
- Object-to-object mapping API. Again, uncovered in Manual, but you can look at code we're planning to use while describing this API.
- Unified API for registration and activation of persistent types and services. IoC framework we use now is much more flexible; there is no dependency on Common Service Locator, but container we use is fully replaceable - e.g. you can use Unity instead of it (test is here - again, this isn't covered in Manual yet).
- Future (delayed) queries, prefetch API and uber-batching provide much better performance almost for free.
- Unified provider-independent exceptions.
- Lots of LINQ provider extensions, including projections to custom types (POCO objects in LINQ queries), local collections in queries, custom LINQ compiler extensions and even custom query pre-processors allowing, for example, to automatically convert your queries to "localized" ones.
- Richer Session-level events.
- Much faster Entity or graph removal. Likely, you know DataObjects.Net (as before) supports pretty complex Entity removal process. It recursively discovers the graph of references to removing entities and finally removes nodes (Entities) and nullifies the edges (associations) in the whole graph. This ensures removal happens safely and every affected entity gets notified. But such a siscovery process is pretty complex: in DataObjects.Net v3.9 complex removal was the slowest operation (~2 times slower then entity creation). But now we've involved the whole bunch of new APIs to make this efficient: future queries and prefetch API are used to discover the graph faster, statement batching helps to "join" query operations with removals together. So I'm ready to bet complex removals are now at least 5-10 times faster than in v4.0.5.
- A set of integrated services allowing to study the state of DataObjects.Net caches, invalidate them and execute such low-level operations on entities as direct field modification (w/o property setter invocation). DirectSqlAccessor is, likely, one of the most useful services among them.
- Significant improvements in schema upgrade API. And yes, now there are move (to another type) and copy field hints.
- New DomainUpgradeMode.Legacy allows to use DataObjects.Net with legacy schemas. There are still some limitations, but in many cases they must not act as show stoppers.
- New SessionManager type simplifying usage of DataObjects.Net in web applications.
- Support for custom type discriminators (use [TypeDiscriminator] and [TypeDiscriminatorValue] attributes).
- TypeId column is created only when it's necessary.
We've made a lot of other features and changes, but I hope the most important ones are listed above now. If you're interested, see this and that lists, there are all the issues we've implemented from v4.0.5 release (198 in total).
- Install.bat \ Uninstall.bat files must be executed with Administrator permissions on Windows Vista and above. Of course, this is important only if you'll use them. Standard installer already does this (you'll be requested to provide Administrator permissions for it by UAC prompt on its start).
- Oracle support for 10g is temporarily broken in the current version, so you can use it only with Oracle 9i and 11g.
- A set of sections must be added, including "Disconnected operations", "Full-text search", etc.
- We should remove the whole System namespace (earlier I wrote Xtensive.Core publishes some of its types there) from it because of Sandcastle bug - it was listing the types from mscorlib.dll there, but wasn't listing our own ones. Not really important (there are mainly extension methods), but unpleasant.
- OrderAccounting project is buggy. Frankly speaking, we were unable to fix all the issues there during last days. The cause is DissconnectedState key remapping behavior on ApplyChanges, which is relatively new. All the issues there will be fixed shortly; for now we recommend you to study WPF - it fully relies on DisconnectedState as well now.
- Improve Manual and samples further releasing minor updates 1-2 times per month.
- Migrate to .NET 4.0 and PostSharp 2.0. Or, more precisely, provide .NET 4.0 version - so far we aren't going to fully leave .NET 3.5.