LLBLGen Pro v3.5 has been released!

Last weekend we released LLBLGen Pro v3.5! Below the list of what's new in this release. Of course, not everything is on this list, like the large amount of work we put in refactoring the runtime framework. The refactoring was necessary because our framework has two paradigms which are added to the framework at a different time, and from a design perspective in the wrong order (the paradigm we added first, SelfServicing, should have been built on top of Adapter, the other paradigm, which was added more than a year after the first released version). The refactoring made sure the framework re-uses more code across the two paradigms (they already shared a lot of code) and is better prepared for the future. We're not done yet, but refactoring a massive framework like ours without breaking interfaces and existing applications is ... a bit of a challenge ;)

To celebrate the release of v3.5, we give every customer a 30% discount! Use the coupon code NR1ORM with your order :)

The full list of what's new:

Designer

  • Rule based .NET Attribute definitions.
    It's now possible to specify a rule using fine-grained expressions with an attribute definition to define which elements of a given type will receive the attribute definition. Rules can be assigned to attribute definitions on the project level, to make it even easier to define attribute definitions in bulk for many elements in the project. More information...
  • Revamped Project Settings dialog.
    Multiple project related properties and settings dialogs have been merged into a single dialog called Project Settings, which makes it easier to configure the various settings related to project elements. It also makes it easier to find features previously not used  by many (e.g. type conversions) More information...
  • Home tab with Quick Start Guides.
    To make new users feel right at home, we added a home tab with quick start guides which guide you through four main use cases of the designer.
  • System Type Converters.
    Many common conversions have been implemented by default in system type converters so users don't have to develop their own type converters anymore for these type conversions.
  • Bulk Element Setting Manipulator.
    To change setting values for multiple project elements, it was a little cumbersome to do that without a lot of clicking and opening various editors. This dialog makes changing settings for multiple elements very easy.
  • EDMX Importer.
    It's now possible to import entity model data information from an existing Entity Framework EDMX file.
  • Other changes and fixes
    See for the full list of changes and fixes the online documentation.

LLBLGen Pro Runtime Framework

  • WCF Data Services (OData) support has been added.
    It's now possible to use your LLBLGen Pro runtime framework powered domain layer in a WCF Data Services application using the VS.NET tools for WCF Data Services. WCF Data Services is a Microsoft technology for .NET 4 to expose your domain model using OData. More information...
  • New query specification and execution API: QuerySpec.
    QuerySpec is our new query specification and execution API as an alternative to Linq and our more low-level API. It's build, like our Linq provider, on top of our lower-level API. More information...
  • SQL Server 2012 support.
    The SQL Server DQE allows paging using the new SQL Server 2012 style. More information...
  • System Type converters.
    For a common set of types the LLBLGen Pro runtime framework contains built-in type conversions so you don't need to write your own type converters anymore.
  • Public/NonPublic property support.
    It's now possible to mark a field / navigator as non-public which is reflected in the runtime framework as an internal/friend property instead of a public property. This way you can hide properties from the public interface of a generated class and still access it through code added to the generated code base.
  • FULL JOIN support.
    It's now possible to perform FULL JOIN joins using the native query api and QuerySpec. It's left to the developer to check whether the used target database supports FULL (OUTER) JOINs. Using a FULL JOIN with entity fetches is not recommended, and should only be used when both participants in the join aren't the target of the fetch.
  • Dependency Injection Tracing.
    It's now possible to enable tracing on dependency injection. Enable tracing at level '4' on the traceswitch 'ORMGeneral'. This will emit trace information about which instance of which type got an instance of type T injected into property P.
  • Entity Instances in projections in Linq.
    It's now possible to return an entity instance in a custom Linq projection. It's now also possible to pass this instance to a method inside the query projection. Inheritance fully supported in this construct.

Entity Framework support

The Entity Framework has been updated in the recent year with code-first support and a new simpler context api: DbContext (with DbSet). The amount of code to generate is smaller and the context simpler. LLBLGen Pro v3.5 comes with support for DbContext and DbSet and generates code which utilizes these new classes.

NHibernate support

  • NHibernate v3.2+ built-in proxy factory factory support. By default the built-in ProxyFactoryFactory is selected.
  • FluentNHibernate Session Manager uses 1.2 syntax. Fluent NHibernate mappings generate a SessionManager which uses the v1.2 syntax for the ProxyFactoryFactory location
  • Optionally emit schema / catalog name in mappings Two settings have been added which allow the user to control whether the catalog name and/or schema name as known in the project in the designer is emitted into the mappings.

Comments

# re: LLBLGen Pro v3.5 has been released!

Monday, March 19, 2012 5:55 AM by Wiebe

Great! Finally some runtime improvements again :)

Do you have a quick list of what system type converters are new? Is there support for saving enums as their string representation for example?

I didn't manage to create a generic type converter for this unfortunately, meaning you always have to create a separate type converters for enums (or at least, inherit from a generic one for each enum type)

# re: LLBLGen Pro v3.5 has been released!

Monday, March 19, 2012 6:12 AM by FransBouma

@wiebe

as we shipped only the bool<-> numeric type converter before, all others are new. We made a converter for most common ones we could think of.

Enum to string... no, that's not included. Don't know whether this is doable in a generic one, as the validation will check the type (which is a specific enum type) of the field with the type returned by the type converter (which is a generic enum).

 btw, every release has seen runtime library improvements, e.g. in v3.1 we optimized a lot in case of performance of object creation in e.g. prefetch paths

# re: LLBLGen Pro v3.5 has been released!

Monday, March 19, 2012 6:52 AM by Wiebe

@Frans

I know there's constant improvements in the runtime, but now there's actually new features :)

Yes I don't think it's doable to create a generic one, that's why it can only be done on the framework level I think.

We just switched to saving enums as their string representation as it's more readable.

I have one that does all enum conversions, it looks like this:

   public class EnumConverter<T> : TypeConverter

       where T : struct

...

But it requires to create an inherited version for each Enum, that works just fine.

Will look at 3.5 ASAP, thanks!