Wednesday, October 22, 2008

DataObjects.Net v4.0 is updated

What's new:
- WPF sample utilizing paired properties, EntitySets, two-way WPF data binding, validation framework, querying (there is just one query for now ;) ).
- EntitySets, paired properties, validation and WPF events
- We've bundled PostSharp and all the other prerequisites to distributive.

You can download the updated version here.

P.S. Tomorrow we'll update our web site as well.


  1. > querying (there is just one query for now ;) ).

    Is querying still implemented through RSE-queries or Linq?

  2. Still RSE. You know, our guy that planned to work on LINQ support was on vacation till this week ;)

  3. But: even this one query shows well what RSE can do. There is a provider filtering primary index records by specified predicate defined in C#:

    rsCompany.Filter(tuple => tuple.GetValue<string>(nameColumnIndex).StartsWith(namePrefix));

    You'll easy find out that result of compilation of this provider to SQL is correct - i.e. there is an expression with LIKE.

    So the same query, but executed in completely different fashion on different storages. Directly - for memory storage, and via compilation to SQL - for SQL storages.

  4. Thanks for this wonderful product and for reviewing you licensing model. i have a few things i would like to request.

    1. What different architectures can you fit DO into? e.g. Could i use it with WCF, ASP.NET 3.5?

    2. May we have many more examples? I would like a Membership provider model, for ASP.NET 2.0+. Please include examples that show different ways of getting thing s done esp. with new stuff. Some people may want to know how to use it with WWF.

  5. 1. Generally - into any. Now some remarks:

    WCF is great for cross-platform communication. But the cost of such portability is high: in fact, it serializes trees of relatively simple object, but not general graphs, i.e. graphs with cycles (that's not completely true - there is "unofficial" way to do this, please see for details). Consequences:

    a) Initially we'll provide .NET Remoting based Domains connections (an underlying transport layer for connecting master and slave Domains). Just because it will be simpler for us to get it working.

    b) WCF based connections will be added later.

    c) Will it be possible to use WCF to pass the Entity descendants to different AppDomains "as-is", i.e. by serializing them directly by WCF? For now I can't answer this question. This seems realistic, but on the other hand, much less useful then b) (seems useful only if other communicating parties work on different platforms). But at least you'll be able to send their simple clones created by your own.

    Let's turn to ASP.NET 3.5: shortly we'll support LINQ => LINQ data source will be supported. For now I imagine what else we can do here. If you have any ideas - we're always open.

    2. We'll work on ASP.NET sample in November. Our primary goal here is showing DO scalability and performance, so we'll use a relatively simple, but big database. And certainly we'll try to use ASP.NET specific features or code.

    Other samples, including simple console feature demos, will also be available. Difficult to say about the timeframe, but we'll try to deliver at least few of them in November (most likely - query examples and schema upgrade sample).

    3. I'll asnwer about WWF a bit later. Actually I'm not an expert in it, although aware of its concepts. A part of our team uses it one of our projects, so I must talk with the right guys to give the answer here.

  6. Thanks Alex, i also appreciate the quick response. I'm glad that you have included the roadmap. I have a project that i'm working on now, and am considering DO4.0 and the funders of the project like timelines and features.

    The reason why i talked about WCF is that i'm looking at a project that will possibly be scalable to and have that public Web Service structure.

    I'm visualizing DO4.0 between the Database and the [ServiceContract] & WCF Service, and the clients connecting to the WCF Service.

    This morning i failed to do something trivial. I tried to connect to a named instance in SQL server 2005 called "sql2005". using mssql://localhost/sql2005/DO40-Tests
    I hit a hard rock. How would i set this up?

    i realised something named pluginmanager in one out your folders, does it mean that DO4.0 will allow plugins? How would be the plugins be used? I'm asking that because my project will have late-bound plugins on the UI and it would be interesting to have a plugin on the business layer too.

    I should tell you, i will be making a presentation to the development team and some stake holders about DO4.0. Do you have a presentation, similar to the one you had for 3.9?

    i'm finding your product interesting already.

  7. You should use "mssql2005://localhost\sql2005/DO40-Tests" string.

    Connection URL is translated into underlying connection options by SQL DOM. See some examples here.

    Concerning PluginManager - see its namespace description. You can get the imagination of its usage by Xtensive.Storage.Building.Builders.DomainBuilder.CreateHandlerFactory() method.

  8. I get the following error when trying to debug the Xtensive.Storage.Samples.Wpf application you have included in the DO4.0 bundle.

    Can not get validation context:
    There is no active transaction.

    Stack Trace
    at Xtensive.Storage.Session.get_ValidationContext() in c:\My Projects\Svn\Xtensive\Xtensive.Storage\Xtensive.Storage\Session.cs:line 65
    at Xtensive.Storage.Samples.Wpf.Model.Services.Filler.Fill() in D:\Develop\CS\DO\Xtensive.Storage.Samples\Xtensive.Storage.Samples.Wpf\Model\Services\Filler.cs:line 15
    at Xtensive.Storage.Samples.Wpf.Program.Main(String[] args) in D:\Develop\CS\DO\Xtensive.Storage.Samples\Xtensive.Storage.Samples.Wpf\Program.cs:line 34
    at System.AppDomain._nExecuteAssembly(Assembly assembly, String[] args)
    at System.AppDomain.ExecuteAssembly(String assemblyFile, Evidence assemblySecurity, String[] args)
    at Microsoft.VisualStudio.HostingProcess.HostProc.RunUsersAssembly()
    at System.Threading.ThreadHelper.ThreadStart_Context(Object state)
    at System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state)
    at System.Threading.ThreadHelper.ThreadStart()


    using Xtensive.Storage.Samples.Wpf.Model;

    namespace Xtensive.Storage.Samples.Wpf.Model.Services
    public class Filler : SessionBound
    public void Fill()
    *ERROR* using (Session.ValidationContext.OpenInconsistentRegion()) {
    var cCessi = new Company

  9. It looks like this is a bug, but we couldn't reproduce it. Have you used SQL Server 2005, or IMDB?