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

Friday, September 14, 2012

DataObjects.Net 4.6 Beta 3 is available

I'm glad to announce that DataObjects.Net 4.6 Beta 3 is made available. It includes important fixes and improvements:

Advanced version of LINQ query preprocessor

Instead of implementing IQueryPreprocessor interface you can inherit from QueryPreprocessor class. The only difference is Apply(Session, Expression) method which allows you to get current session and take it into account when processing Expression.

Fixed redundant query nesting under certain conditions

Less SELECT ... FROM (SELECT ...) clauses would be used from this version.
As the result, size of generated SQL for certain large queries with multiple joins significantly reduced (up to 50%). Generated SQL became less recursive that allowed certain queries to execute on SQLite while previously certain complex queries yielded "parser stack overflow" error.

Fixed redundant subqueries under certain conditions

Previous versions of DataObjects.Net might transform your subqueries into a non-optimal format.

For example the following query

  session.Query.All<Order>()
   .Select(o => new {
      Order = o,
      TotalPrice = o.Items.Sum(i =>  i.Price * i.Amount)
    })

might produce two subqueries for OrderItem instead one. Now such scalar subqueries will not be split.

Improved formatting of SQL when chains of AND/OR operators are used

Sequences of AND/OR operators are translated without additional braces now, so query is more readable.

Key.Create(Session) method has been renamed to Key.Generate(Session)

This method is used to generate new key. Since there are lots of other Key.Create() methods that create key from supplied values new name is more readable and reduces number of Key.Create() overloads. Old methods are kept for compatibility, but marked as obsolete.

Added Key.Create() overload that allows to specify TypeReferenceAccuracy

This is an advanced version of existing methods. It allows you to specify accuracy such as  TypeReferenceAccuracy.ExactType. All existing methods use TypeReferenceAccuracy.BaseType.

Added DirectSessionAccessor.GetChangedEntities() method

This is a long requested method that allows you to get entities (via thier EntityStates) which were changed in current session, but were not saved to the database yet.

Perform upgrade in single transaction when possible

This is a long requested feature too. Previous versions of DataObjects.Net use two transactions for Perform/PerformSafely upgrade modes. Since 4.6 Beta 3 single transaction is used for all upgrade modes.

Added support for using SQLite provider in 64-bit processes

Previous releases of DataObjects.Net 4.6 were compiled with 32-bit only SQLite provider.
This prevented them from using SQLite in 64-bit process. Now MSIL version is used.

As always new versions are available at download site and NuGet gallery.

Tuesday, August 21, 2012

Moving towards openness

Remember the days when every website wanted to maintain its own database of users and related data? To download some restricted content you have to register there, provide a password, successfully forget it after a couple of minutes and use "Restore password" feature every time you visit the website later.

The same kind of website was our corporate X-tensive.com website. Moreover, our support website was configured to work with users from x-tensive.com only. Until...

Until we rejected the model above and switched to OpenID authentication scheme and made all versions of DataObjects.Net available for download without registration. The same change was applied to support.x-tensive.com — now anyone who has OpenID may log in and post an issue/feedback.


Having that done, we closing user registration area on x-tensive.com as now it doesn't have any sense, however, all user accounts will be preserved and users may sign in in their x-tensive.com profile as usual.

Note for owners of DataObjects.Net licenses: we launched new customer area, don't miss it. All your license-related data is migrated from x-tensive.com to get.dataobjects.net website.

Saturday, August 11, 2012

9-th anniversary, new prices, community edition and much more

Hello everybody!

Today we are celebrating the fact that 9 years ago the first version of the award-winning, revolutionary ORM named DataObjects.Net was released. Due to this we are launching our new edition & pricing policy, new customer area and we are hoping that you'll like it.

DataObjects.Net 4.5.4 final

The main change in this version in addition to all listed in RC 1 & RC 2 is Community edition support. Download it from official website or from NuGet repository.

Community edition

Many users requested Community Edition of DataObjects.Net with full set of features and with possible limitation of number of persistent types. Well, here it is, the Community edition is rolled out today. It has the following characteristics:
  • The edition is absolutely free.
  • Anyone can obtain it from our website.
  • It contains 2 hardware licenses (means it can be installed onto 2 workstations at once).
  • Number of persistent types is limited to 20.
  • The license is issued for 1 year as regular licenses.
Obtain Community edition.

Professional edition

Professional edition is available for $150 and includes 2 hardware licenses. Comparing to the previous pricing scheme (500 euro), the price cutting is more than 65%. Moreover, 3 items are available for $120 each and 5 items - just for $100.

Get Professional edition.

Ultimate edition

Ultimate edition also gets its new shiny price, from now it is available only for $1500 instead of 2500 euros. The edition provides the unlimited number of hardware licenses. Ultimate edition contains access to the source code no more.

Get Ultimate edition.

Access to source code

We extracted 'Access to source code' feature to a separate package to make it available to all our customers, not only for Ultimate edition owners as it was earlier. So anyone, even an owner of Community edition has a chance to dive deep in DataObjects.Net white and black magic. The price for the package is set to $500. The source code is available in download area of our website.

Get access to source code.

New customer area

We are inviting you to the new customer area that we have built for you for better and easier license management. No more registration, we migrated to OpenID authentication scheme. We added license sharing feature, so your developers won't bother you with anything concerning licenses and hardware locks, you may share the license with all of them.

The area can be accesses by clicking on 'My Account' link in the main menu:


Soon you'll receive our invitation e-mail. We need you to log in the area to get your licenses associated with your account. Don't forget to periodically check your mailboxes!

Join the celebration! Thank you!

Links:


Monday, August 06, 2012

DataObjects.Net Extensions 4.5.3

DataObjects.Net Extensions are updated to the latest version.

What are these so-called extensions?
They are small projects that extend standard functionality of DataObjects.Net core. Version 4.5.3 contains of the following extensions:
Each of them has a corresponding nuget package so they can be installed separately or in any combination. Using NuGet is a recommended way of installing the extensions.


DataObjects.Net Extensions are published on CodePlex with source code opened. You may also want to check the documentation before start using them. The extensions are maintained by Xtensive engineers and by volunteers from DataObjects.Net community.

Changes

  • [Security] Fix threading issues with hashing services
  • [Localization] LocalizationModule is added. It automatically calls TypeLocalizationMap.Initialize(Domain) during Domain build.
  • [BulkOperations] Support for single insert operation is added
  • [BulkOperations] Fix for drivers that don't support UpdateFrom and DeleteFrom constructs

Download

Roadmap

There are several new extensions that are now being developed and tested:
  • Xtensive.Orm.Sync - Microsoft Sync framework support (expected in 4.6 version)
  • Xtensive.Orm.Tracking - a tracking monitor that tracks changes in entities and notify you about them. Good for auditing purposes and similar tasks. (expected in 4.6 version)
  • Xtensive.Orm.Security.Web - ASP.NET Membership provider & Role provider (expected in 4.5.4 version, contribution of Carl Healy)
  • Here could be your extension - Contribute! Obtain DataObjects.Net license for free!

Thank you!

Friday, August 03, 2012

DataObjects.Net 4.5.4 RC 2

Today we are publishing the next release candidate for the upcoming version of DataObjects.Net.

Changes

  • [main] Exceptions on IoC container finalization (usually they appear because dependent objects are already finalized) are now suppressed
  • [main] Fixed NullReferenceException in EnsureIsFetched method in SessionOptions.ReadRemovedObjects mode
  • [main] Entity.IsMaterializing property wasn't handled properly
  • [main] Transaction opening is fixed for SessionOptions.ClientProfile

Download

Friday, July 13, 2012

DataObjects.Net 4.5.4 RC

Today we are publishing the next release candidate for the upcoming version of DataObjects.Net.

Changes

Changes in 4.5.4 RC:

[main] Fixed comparion of Key fields in interaces in LINQ queries under certain scenarios
[main] Visual experience of License Manager has been improved
[main] Fixed incorrect handling of RemoveFieldHint under certain scenarios
[main] Fixed incorrect behavior in DisconnectedEntityState.UpdateOrigin method

Download

Monday, July 02, 2012

DataObjects.Net 4.5.3 is released

Today we are publishing the final version of DataObjects.Net 4.5.3.

Changes

Changes in 4.5.3 comparing to 4.5.3 RC 4:

[main] Fix NullReferenceException under certain validation scenarios
[main] Fixed memory leak in Domain.Build() process

Download

DataObjects.Net 4.4.3 is out

Today we are publishing the final version of DataObjects.Net 4.4.3.

Changes

Changes in 4.4.3 comparing to 4.4.3 RC 2:

[main] Fixed memory leak in Domain.Build() process
[main] RemoveFieldHint, ChangeFieldTypeHint are now correctly handled for Structure fields

Download

Friday, June 22, 2012

DataObjects.Net 4.5.3 RC 4

Today we are publishing the next release candidate for the upcoming version of DataObjects.Net.

Changes

Changes in 4.5.3 RC4:

[main] Fix POCO materialization when subqueries are used
[main] Fix translation of multiple aggregate subqueries when calculated columns are used
[main] Throw descriptive exception when RenameTypeHint has invalid old type name
[main] Improve detection of serialization failure errors for SQL Server

Download

Thursday, June 14, 2012

DataObjects.Net 4.5.3 RC 3

Today we are publishing the next release candidate for the upcoming version of DataObjects.Net.

Changes

Changes in 4.5.3 RC3:

[main] Finally, change log is included in distribution =)
[main] RemoveFieldHint, ChangeFieldTypeHint are now correctly handled for Structure fields
[main] Correctly skip full-text indexes if storage does not support them
[mysql] Fixed index direction support for MySQL
[mysql] Improved translation of DateTime.Date for MySQL
[mysql] Fixed incorrect translation of Math.Truncate and Decimal.Truncate for MySQL
[mysql] Fixed incorrect translation of String.IndexOf for MySQL
[mysql] Fixed mapping of Single and Double types for MySQL
[mysql] Fixed schema extraction with case-sensitive collation for MySQL
[postgresql] Hex format for byte array literals is used for PostgreSQL 9.0 and later

Changes in 4.5.3 RC2 (wasn't officially announced):

[main] Validation now works in ClientProfile
[main] Fixed various errors with certian EntitySet usage scenarios in ClientProfile
[main] Fixed "Scope can't be disposed" error under certain query enumeration scenarios

Download