LLBLGen Pro v5.2 Beta has been released!
Earlier this week we've released LLBLGen Pro v5.2 beta! See below for the new features and changes in this release. It's feature complete and comes with full documentation. We plan to release the RTM within 2 weeks or so.
Initially we had planned for this release to port our LLBLGen Pro runtime framework to Netstandard1.6 (.net core) however we postponed that port to Netstandard2.0 and will release that port in v5.3. We did spend considerable time on the port to Netstandard 1.6 hence v5.2 took longer than expected.
What's new in LLBLGen Pro v5.2
LLBLGen Pro Designer
Major new features
- Model- and meta-data analysis. This analysis reports non-error issues and suggestions for the model and meta-data in the project in real time. Issues reported are e.g. duplicate FKs, an FK that's pointing to itself or e.g. if an FK field is shared among multiple FK constraints. Suggestions are e.g. how many meta-data elements don't have a mapping or that there are e.g. several PK-PK relationships in the model and they can be used to create inheritance hierarchies. All suggestions and warnings are reported with ready-to-use actions you can click on to directly execute an action (e.g. map all unmapped tables to entities). This system will be extended in the future with more analysis options.
- Several Entity Framework Core enhancements: v1.1.x is now supported, Firebird is now a supported database, read-only entities are now supported.
- .NETStandard 1.6 is now a supported platform, for Entity Framework Core and the DTO classes framework.
- Creating a project now asks for 'Initial contents' for the project. The options are: 'Empty project' (which is equal to the Create Project in previous versions), 'Relational model data retrieved from a database' or 'Relational model data container for a database'. The last two starts their respective wizards after the project has been created so the user doesn't have to look for the option in the user interface.
Minor changes / fixes / new features
- The project file loader now reliably reports where in the file an xml error or other error was found during project load, and if possible which XML snippet caused it. This can greatly help finding errors in the project file, e.g. after a bad merge in a source control system.
- All drivers now construct the connectionstring with DbConnectionStringBuilder, which should provide more protection against badly formed connectionstrings due to userinput.
- A typeconverter which was moved to a different namespace is now normally loaded and used in existing projects which refer to the typeconverter with the old namespace name. The typename of the typeconverter itself has to be the same for this to make it work. Example: Foo.MyTC is used as typeconverter in a project. This typeconverter is moved to the namespace Bar: Bar.MyTC. Loading the project will now automatically use Bar.MyTC and not throw an error anymore that a type converter (Foo.MyTC) is missing.
- Various context menu additions for various nodes in the Project Explorer to make it easier to find how to reverse engineer project elements (e.g. Entities, Typed Views) from relational model data elements like Tables, Views. It will pick the first database in the project which has its sync source set to database, or if that's not available, set to 'mixed'. If none of the databases in the project have a sync source set to database or mixed, it will pick the first one. For more fine-grained control, the catalog explorer reverse engineer functionality is the best choice.
- QuickModel now has a flyout panel with quick help regarding commands so users can quickly check what the syntax is of common commands without first having to read a lot of documentation. It's opened by a new button in the QuickModel user interface called Command Help
- The settings Exclude orphaned element detected action and Non excludable orphaned element detected action have been moved from Entity Model / General to Entity Model / Model First Development, as they're only applied in model first actions.
- For framework settings, the property grid now automatically displays the default source of a setting so it's easy to find back what default setting in the project settings is controlling a setting on an element.
- For attribute definitions, a new macro has been added: {$FriendlyName} which converts the element's name into a friendly name, where PasCal cased name fragments are prefixed with a space, and underscores are removed and replaced by a space. Example: OrderNumber and Order_Number will both become Order number. You can use this in e.g. Display() attribute definitions on elements. The element name without a group name or parent container name is used.
- It's again possible to add fields in bulk to a typed list inside the typedlist editor. This feature was present in v4.2 and earlier.
- The derived element editor now allows keyboard and right-click behavior in the shape editor, to make it easier to remove and denormalize fields.
- The number of errors/warnings/information messages are now displayed in the toolbar of the designer for a quick overview, including buttons to go quickly to the errors/warnings/information messages in the Errors & Warnings pane.
LLBLGen Pro Runtime Framework
New functionality / changes- Data Scope now has Async / Await variants of its methods so it can be used fully asynchronously.
- A global flag has been added for SelfServicing to disable lazy loading with one setting: EntityBase.EnableLazyLoading. The flag is enabled by default (so lazy loading is enabled by default) for backwards compatibility.
- Lots of string interpolation has been refactored to more efficient string usage, resulting in faster performance overall and even lower memory footprint/object pressure. LLBLGen Pro is now the fastest ORM, beating all microORMs too (using the plain sql API).
- Size specification on Init() methods in the generated FieldInfoProvider and PersistenceInfoProvider classes have been removed, so merge conflicts will no longer occur when merging different code bases of generated code.
- For new projects and projects which change the target framework to the LLBLGen Pro Runtime Framework, the default output type for TypedLists and TypedViews has been changed to PocoWithQuerySpecQuery. This was TypedDataTable. If you still want to use TypedDataTable as the outputtype for TypedLists and TypedViews, you can change the default in the LLBLGen Pro Runtime Framework settings in the Project Settings. The default choice is for QuerySpec and not Linq because typed views mapped onto stored procedure resultsets aren't supported in Linq but are supported with QuerySpec. For existing projects the old default is kept.
- Linq/QuerySpec: Using 'Distinct' on a subquery which is used inside an 'IN()' clause is now used inside the subquery. This is due to an addition in the FieldCompareSetPredicate which now allows 'Distinct' in the subquery. For most databases the 'Distinct' in the subquery has no effect, but on e.g. Oracle it can help the optimizer to pick an index instead of doing a table scan.
- AddCollectionForSave and AddCollectionForDelete are now part of IUnitOfWorkCore.
- DataAccessAdapter.SaveTransaction(name) and Transaction.SaveTransaction(name) no longer throw an exception when name was already used within the same transaction, as all supported databases which do support savepoints support multiple savepoints with the same name in a single transaction so the check / limitation is unnecessary.
- Entity field validation now doesn't report a precision overflow for decimals/floats/doubles with precision equal to scale and a value between (-1.0, 1.0) excluded. Even though the precision of a value in that interval, e.g. 0.55, is 3, the leading zero isn't taken into account by databases and therefore the runtime shouldn't either.
Entity Framework Support
Entity Framework CoreThe following new features / changes have been made to the support for Entity Framework Core
- Netstandard 1.6 support. When selected as target platform, the designer will generate a csproj file in the Visual Studio 2017 format, targeting Netstandard 1.6.
- Setting to generate a field as a readonly property and a setting to generate readonly fields as readonly properties. Both use the Entity Framework Core 1.1.x feature of backing fields instead of auto-properties.
- Firebird is now a supported database
- Support for Read-only entities
- Setting to select the CollectionType for a navigator which returns a set. It's now possible to specify as type IEnumerable<T> and ICollection<T> instead of the default List<T>.
How to download the beta
The beta is available under 'My Account' -> Downloads -> v5.2 on the website, after you've logged in, and works with any valid v5.x license. As it is a beta, some bugs/issues might be present.
We also released pre-release builds of the runtime libraries on Nuget for your convenience.