What's new/changed in the LLBLGen Pro designer v5.5?
Below you'll find a list of changes, additions and important fixes in the 5.5 release of the LLBLGen Pro Designer. Please also read the Breaking Changes in v5.5 section to get up to speed with the breaking changes introduced in this version or previous versions.
For your convenience, we've also included the what's new in earlier versions starting from v4.0, so if you're migrating from an earlier version to v5.5, you won't miss important information.
Migrating project files
You can use v5.5's designer side-by-side with a previous versions of the designer and previous LLBLGen Pro versions. You can load project files saved in v3.x or later without conversion in v5.5. A warning will be shown when you save the project for the first time, as the project is in an older format. It's not likely you can load v5.x projects in v4.x/v3.x, and it's also not recommended, as you'll lose v5.x specific information if you save the project again.
Migrating your v3.x or later project to v5.5 is the easiest if you first use a copy of your v3.x or later project with v5.5, so you can roll back to your original project file if you have to. As the project file is XML based, a good source control system will help you with that.
Projects created with previous versions 3.x and 4.x will be marked as 'changed' after the first time they're loaded in the v5 designer. This is due to the fact project settings for the catalog explorer are no longer relying on the preferences but are defined as settings in the project. They're converted to boolean values and are no longer tri-state booleans (with a 'default' value pointing to the preferences value). This is a one-time thing only: once they've been saved in the v5 designer this doesn't happen again.
Migrating preferences
When you first start v5.5 and you have used v5.4 or earlier on the same system before, your earlier preferences will be migrated to v5.5 as a copy, leaving your older preferences as-is. For new settings, the defaults are chosen.
What's new in the LLBLGen Pro v5.5 designer
New / changed / fixed functionality
Major changes / fixes / new features
- Major performance improvements across the board, especially for larger models (250+ entities).
- Support for implicit numeric conversions. The designer can now deal with implicit numeric conversions between model fields and mapped target fields, without the need for a type converter. This feature is supported on frameworks which allow implicit numeric conversions without a type converter: Entity Framework Core 2.1+ and LLBLGen Pro Runtime Framework v5.5+
- Support for Entity Framework Core 2.1 has been added.
Minor changes / fixes / new features
- The designer now supports implicit conversions between Enum and String. It already supported implicit conversions between Enum and a numeric value (int, short etc.). The implicit conversions are supported on target frameworks which support these implicit conversions as well. There's no value length check validation.
- The TDL statement
<[ If HasTypeConverterDefined]>
now returns true as well if the field mapping's property RequiresImplicitNumericConversionAtRuntime returns true, to make sure TDL can deal with this new feature without a new statement. - The TDL statement
<[ TypeConverterFullName]>
will now also return the type converter name for implicit numeric conversions if no type converter is specified but the field mapping's property RequiresImplicitNumericConversionAtRuntime returns true. It will do so for C# and VB.NET. - PostgreSQL: The provider type for timestamptz fields is now TimestampTz instead of TimestampTZ. This change makes generated code require an Npgsql version of 3.2 or higher. This is done as TimestampTZ is marked deprecated and causing warnings during compilation. There's no change in functionality.
- The designer now uses v18.1.6 of the DevExpress controls, which give a nice performance increase across the board.
- The Visual Studio integration now hides the toolwindows if there's no longer a project loaded.
- Several additional system type converters were added: ByteArrayStringConverter, DateTimeOffsetBinaryConverter, DateTimeOffsetByteArrayConverter, DateTimeOffsetStringConverter, DateTimeBinaryConverter, DateTimeInt64Converter, DateTimeStringConverter, StringByteArrayConverter, TimeSpanInt64Converter and TimeSpanStringConverter.
What's new in the LLBLGen Pro v5.4 designer
New / changed / fixed functionality
Major changes / fixes / new features
- PostgreSQL 10.x is now a supported database.
- Support for PostgreSQL 10 identity fields has been added: in the PostgreSQL driver, designer and DDL SQL templates.
- Addition of the CliSyncWithDatabase commandline tool, which is the re-incarnation of the CliRefresher for v5.x: it allows you to refresh catalogs (sync with a database) on the command line. Like with the CliGenerator, it requires a valid license to operate.
- The code generator now caches regular expressions it's using and is optimized overall. It now offers faster template interpretation/execution (2x-3x faster code generation as in previous versions)
Minor changes / fixes / new features
- The setting Code Generation -> Clean up vs net projects has been removed, as the setting is required to be set to true always and there's no advantage to ever have this setting set to false.
- When a perform rule in a code generation task resolves to false (so the task is skipped), the remark in the log is no longer a warning, but has been changed into a normal remark.
- SQL Server connection strings no longer contain 'packagesize' directives as the default value used isn't in sync with some defaults in the various .NET versions. This change means it now falls back on the default the .NET framework used is using.
- When adding an entity to a derived model by right-clicking the entity and there's just one derived model in the project, it's automatically preselected in the selector dialog.
- DTO/DocDB class models: the vs project files for .NET full no longer refer to a non-existing 'Properties' folder.
- DTO class models: the projection func creation method now has a user code region so you can add additional projection fields to the projection.
- TemplateBindingsViewer: When the templatebindings file is chosen in the combobox, the focus is automatically moved to the list of file bindings so scrolling with the mousewheel doesn't accidentally scroll the combobox but automatically scrolls the list of bindings.
- It's now possible to generate DDL SQL scripts for a selection of catalogs instead of all catalogs in a database: select one or more catalogs in the project explorer or catalog explorer and select the DDL SQL script command you want to run from the context menu: the catalogs selected are now used for generating the scripts, the non-selected catalogs are not taken into account.
- Several elements in the project explorer now offer edit actions for themselves, their mappings and their settings. For instance right-clicking a Field allows you to immediately go to that field's mappings in the entity mappings tab or to its settings on the Code Generation Info tab of the entity's editor. This provides an easy way to navigate from elements in the project explorer to their editors and detailed information.
- Adding an entity with a value-typed field to a derived model as a new derived element now correctly unrolls the valuetyped field as a nested derived element.
- The search/replace dialog for the text-editor is now embedded in the tab, like VS and Rider do: a panel with the search controls is opening when the user presses Ctrl-F and is closed when the user presses ESC or clicks the close button.
- When tabbing away from the TemplateBindingsViewer or the PresetViewer and back, the control which had the focus is remembered, so when coming back to the still open templatebindings viewer tab or preset viewer tab, the focus is set on the control that had focus when you tabbed away.
- If a project file contains multiple mappings for a single element to the same type of target for the same database (e.g. an entity is mapped onto two tables), the designer will report an error and list each mapping as suggestion to be removed.
- Copying a TypedList with relationships into the same project now no longer creates dummy m:n relationships which could make the project unloadable
What's new in the LLBLGen Pro v5.3 designer
New / changed / fixed functionality
- .NET Standard 2.0 support. The designer can now generate, for selected target platforms, .NET Standard 2.0 source code
- Firebird 3.0 support. LLBLGen Pro now supports Firebird 3.0, in both designer and LLBLGen Pro runtime. This effectively means that the new Boolean type is now fully recognized. The identity field support of Firebird 3.0 will be added as soon as the Firebird Client supports this.
- The latest releases RSS feed contents is now shown on the Hometab. This way you know when a new release is posted on the website.
- Default sequences for Postgresql in model first. When using model first with PostgreSql, the designer will for fields which have a sequence set in their field mappings set the sequence as the default sequence in the meta-data and will generate the sequence as the default value in DDL SQL scripts. This is needed for ORMs like Entity Framework 6 which don't have sequence support in their mappings and rely on default values for identity/sequence support.
- New Project setting: StoreTimeLastSyncIntoProject. A new project setting (under Entity model - General) has been added: StoreTimeLastSyncIntoProject which, when true (default) will make the designer store the last sync time with database or model with the catalog / schema. This setting can be switched off to e.g. avoid projects having merge conflicts based on time/date values of last-sync
What's new in the LLBLGen Pro v5.2 designer
New / changed / fixed functionality
The following functionality is new, has been changed / updated or was fixed/corrected in this release.
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 namespaceBar
:Bar.MyTC
. Loading the project will now automatically useBar.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
andOrder_Number
will both becomeOrder 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.
What's new in the LLBLGen Pro v5.1 designer
New / changed / fixed functionality
The following functionality is new, has been changed / updated or was fixed/corrected in this release.
Major new features
- Entity Framework Core v1.x support.
Minor changes / fixes / new features
- SQL Server 2016 temporal table metadata retrieval support.
- .NET 4.6.2 is now a supported platform.
- Better HiDpi support due to updated UI controls.
- Reverse engineering now pre-checks all checkboxes of relational model elements which don't have a model element mapped yet.
What's new in the LLBLGen Pro v5.0 designer
New / changed / fixed functionality
The following functionality is new, has been changed / updated or was fixed/corrected in this release.
Major new features
- New, skinnable/themable modern UI. The designer now comes with a new UI, which is skinnable and is based on DevExpress controls. While still Winforms, it looks / feels modern with flat design, new icons and color themes the user can choose from to meet their needs. With the new UI also come nice things like floating editors.
- New relational model data sync system. Sync replaces both database first related actions like refresh catalog and model first related actions like auto-map and adjust relational model data. Everything is managed from a single tab, the Sync Relational Model Data tab.
- Derived Models support. Define derived models on top of the entity model and target a different framework in each derived model. Use the derived models to produce hierarchical projected, denormalized sets and e.g. store them in document databases or use them as DTOs in MVC models or exposed as a service to client-side frameworks. Support for several document databases (MongoDB, RavenDB and a generic document DB) has been added, as well as readonly / readwrite DTO projections.
- Revamped Home tab. The Home tab now shows easy access links to the last opened projects as well as to support and documentation
- Search in Project Explorer / Catalog Explorer. Directly available in the Project Explorer and Catalog Explorer are the search boxes: type in any string and the nodes matching the string are kept, all other nodes are filtered out.
- Preset Editor. Editing presets for code generation is now done in its own editor, similar to the template bindings editor. More Information
- Real time validation. The designer now validates a project in real time using the real time task system. Every change to the project triggers validation which is started after a short interval.
- Auto-referencing generated VS.NET projects. The code generators now automatically reference VS.NET project files generated by the code generator in the same cycle. This means that when the designer generates e.g. two VS.NET projects, A and B, and B has a dependency on A, the VS.NET project file of B automatically references A so the user doesn't have to do that manually anymore.
Minor changes / fixes / new features
- The Error & Warnings list doesn't popup anymore when errors / warnings are detected. This is done to prevent it from popping up when the validation is run in parallel of user actions: it would steal focus away from what the user is doing.
- Type shortcuts, default length/precision/scale. If a type shortcut has a default precision/scale/length set to 0, it will overwrite the value with 0 if a field's type is set to that type shortcut. If the default precision/length/scale is set to -1, it'll leave the existing value as-is if the field's type is set to that type shortcut. This is useful in only a very small set of typeshortcuts. System type shortcuts all values greater or equal than 0.
- The
${ContainerName}
macro wasn't fully replaced, it left the dangling '}' in the output. - An error is now generated when a unique constraint in an entity has a string field with a length of 0 or larger than 8KB.
- Precision specified for a DateTime field is now used in DateTime2 database fields on SQL Server.
- The meta-data retrieval log now reports that a catalog name with
:
has this character replaced with a_
and that the user should rename the catalog in the database management system. - Refreshing relational model data for a catalog which has a different name (by case) on the server now works as if the name is the same as the one in the project, if the database system targeted is a case-insensitive database, like SQL Server. If the database system is a case sensitive database, like Oracle, the names are still seen as two different catalogs/schemas, which is the old behavior.
- .NET 4.5.2 is now the default platform. Microsoft ends support for 4.0-4.5.1 in January 2016. The only supported platforms by Microsoft from then on are 3.5, 4.5.2 and 4.6.x. We keep the platforms in the set of supported platforms, but will consider removing them entirely later on. It's not a big deal though: the end result is the same whether the user picks 4.5.0 or 4.5.2, the only thing that changes is the .net framework value in the csproj/vbproj file.
- By default newly created single elements are opened in their editor right after creating them (except from quick model). This is configurable in the Designer preferences using the setting OpenNewlyCreatedProjectElementInEditor.
- It's now possible to specify whether a field is part of the PK by clicking a checkbox. It's more efficient to use the older (still present) edit mechanism of the identifying field set, but the one in the grid is more convenient. The 'Is PK' column also has been moved to the left a bit to make it more visible and easier to edit.
- Action Suggestions are now called Feature Hints and have a 'perform' link to execute the feature instead of a link in the name to make it more obvious you can click the feature to perform it.
- SQL Server DDL SQL now doesn't specify
ON [PRIMARY]
anymore with create/alter table and create PK statements. This has the benefit that the scripts are now usable on Azure SQL Server. The directiveON [PRIMARY]
would create the elements on the primary file, and without the specification the create statements create the elements on the default file of the database, which are usually the same. - All VS.NET 2008 project templates have been replaced with vs.net 2010 project templates. A project generated for .NET 3.5 is still supported but will use the vs.net 2010 project file. vs.net 2010 project format is loadable by vs.net 2010 or higher without conversion.
- Clicking on 'Go there' in an error / warning suggestion will now open the editor form on the right sub-tab (e.g. mappings tab), if applicable.
- QuickModel now has a better intellisense prompt:
Ctrl-Space
andCtrl-Shift-Space
now filter on what the user already typed, and enter now correctly inserts the right value into the editor instead of using what's been typed as the value to execute. - TPEH inheritance info is now directly editable inside the inheritance viewer on the inheritance info tab in the entity editor. This makes it easier to edit discriminator values for a hierarchy without going through pop up edit dialogs.
- Various menu items have been added to several parts of the designer to make it easier to e.g. create elements and navigate to other parts of the model.
- By default, AutoAssignTypeConverterToFieldMapping is now set to true when preferences are loaded from previous versions and a project is loaded from a previous version.
- NHibernate 3, Entity Framework 1, 4 and 5 are now marked 'legacy'. To make it easier for users to select the right framework, we marked Nhibernate, EF1, 4 and 5 as 'legacy', and the frameworks are now sorted accordingly so it's easier to pick a recent framework.
- Entity Framework v6 settings: EmitForeignKeyFields is now set to true by default (not in existing projects)
- To make room for the Derived Model feature and to distinct other elements in the tree from what they mean in context of derived models, the nodes in the tree have to be moved a bit. Introduced is a new top node, Entity Model, which is a direct child node of the project node. All v4 child nodes of the project node are moved to become childnodes of this node. Additionally a new top node is added for derived models: Derived Models. Below that node, the Derived model nodes are placed.
- The option 'Validate and Adjust relational model data' has been replaced with 'Sync Relational Model Data'. The new option opens the Sync Relational Model Data tab, which allows the user to sync the relational model data with model and database.
- Real time DDL SQL export check. The designer now checks in real-time whether a DDL SQL export is required.
- Better Designer Preferences dialog. The preferences are now split up into 'Designer preferences' and 'New Project Defaults'. This fixes a big confusion with users where they changed a setting in preferences only to find out it didn't have any effect as the setting was only used when a new project was created.
- Default folders, created by installer. The installer now creates default folders for projects, templates and tasks, versioned per version number.
- It's now possible to specify a preferred DB type for a type shortcut.
- The code generation configuration dialog has been changed to meet the requirement to generate multiple code bases using multiple sources (entity model, derived models) in one go.
- The Import system is now able to import derived models and derived model elements.
- Copy / Paste has been made more flexible: the 'Paste' commands are now available on more nodes. Additionally copying derived models and root derived elements are copyable as well, including the entities / mappings they refer to.
- The CliGenerator now has more command line options to deal with multiple model code generation tasks.
- SQL Server 2016 is now a supported database.
Context menus
The following notable changes have been made to context menus in the Designer and which are important for you if you have used a previous version of the designer.
In Project Explorer
- Auto-map Unmapped entities and Automap Unmapped entity fields have been removed as they're replaced with the new sync relational model data feature
- Refresh relational model data has been removed as it's been replaced with the new sync relational model data feature.
In Catalog Explorer
- Refresh relational model data has been removed as it's been replaced with the new sync relational model data feature.
What's new in the LLBLGen Pro v4.2 designer
New / removed designer preferences and project properties
The following Designer Preferences and Project Settings are new.
- Singularize Element Names (default: true). When set to true, the name for a new model element which is derived from the relational model element (e.g. table) it is reverse engineered from, is singularized. Example: a new entity reverse engineered from the table 'customers' will be called 'customer'.
- Entity action combination default for table. The default action combination for an entity mapping if the mapping target is a table. Default is CreateRetrieveUpdateDelete. Not all supported target frameworks support all available values. Please consult the LLBLGen Pro documentation on the used target framework for the supported values of that framework regarding table targets. If a framework doesn't support a value, it's ignored.
- Entity action combination default for view. The default action combination for an entity mapping if the mapping target is a view. Default is Retrieve. Not all supported target frameworks support all available values. Please consult the LLBLGen Pro documentation on the used target framework for the supported values of that framework regarding table targets. If a framework doesn't support a value, it's ignored.
-
Sequence name matching pattern. The pattern which is used to
find a sequence for a numeric primary key field which is being
reverse engineered to an entity field. The pattern is used to
construct the name of the sequence to find. Pattern elements can be:
{$TableName}
for the name of the table the field is in and{$FieldName}
for the name of the field which is sequenced. You can also specify any literal text. An element can be mentioned more than once. A new project will inherit this value. -
Unique constraint pattern. The pattern which is used to
construct the names for unique constraint objects in the relational
model data. Pattern elements can be:
{$TableName}
for the name of the table the unique constraint is part of,{$Guid}
for a guid value to ensure a unique name,{$FieldNames}
for the names of the table fields, in ordinal order, which are part of the unique constraint. You can also specify any literal text. An element can be mentioned more than once. -
Foreign key constraint pattern. The pattern which is used to
construct the names for foreign key constraint objects in the
relational model data. Pattern elements can be:
{$TableName}
for the name of the table the foreign key constraint is part of,{$Guid}
for a guid value, to ensure a unique name,{$FieldNames}
for the names of the table fields, in ordinal order, which form the foreign key,{$PkTableName}
for the name of the primary key side table in the foreign key constraint. You can also specify any literal text. An element can be mentioned more than once. -
Primary key constraint pattern. The pattern which is used to
construct the names for primary key constraint objects in the
relational model data. Pattern elements can be:
{$TableName}
for the name of the table the primary key constraint is part of,{$Guid}
for a guid value to ensure a unique name,{$FieldNames}
for the names of the table fields, in ordinal order, which are part of the primary key constraint. You can also specify any literal text. An element can be mentioned more than once.
Removed settings / preferences
- EnforcePascalCasingAlways. This setting has been removed as the only place it was used was in validation, it was never enforcing pascal casing in e.g. reverse engineering anyway (so only when renaming elements) so it had no real purpose.
New / changed / fixed functionality
The following functionality is new, has been changed / updated or was fixed/corrected in this release.
Main new features / changes
- Copy / Paste support for all model elements (entity, value type, typed list, typed view, table valued function call, stored procedure call): Paste full (with mappings and target tables) or just model elements, across instances (stand alone designer only) or within the project (VS.NET integration and standalone designer).
- Automatic re-apply changed settings on existing project: e.g. changing a pattern for a name will reapply the setting on the existing model, making sure the names comply with the setting value.
-
New name patterns for auto-created FK/UC/PK constraints
(model first).
This makes it possible to define a naming pattern for e.g. FK
constraints other than the default
FK_{guid}
. You can use macros to make sure the FK name reflects e.g. the fields and the tables it is referencing. - It's now possible to save search queries in the project file.
-
Ability to define default constraints for types, per type - DB
combination (model first).
This makes it possible to for example define a custom type, e.g.
EmailAddress, based on the .NET string type, with length 150 and a
default of
undefined@example.com
for SQL Server and then define a field in an entity with type 'EmailAddress'. Creating the database tables from this model in the designer will then result in a default constraint on the table field the email address field is mapped on with valueundefined@example.com
. - General editors per project element type: one editor which is kept open and will show the selected element in the project explorer, making it very easy to check / edit configurations on multiple elements. This will make it possible to e.g. edit or look at mapping data for several entities quickly by opening the general entity editor and opening the field mappings tab while selecting the entities to check / edit in the project explorer: the field mappings tab is kept the tab visible so the data of the selected entity is shown each time.
- Intellisense helpers in QuickModel for types, names and relationship types: It's now possible to open helper lists of names in scope, types available and the list of relationship types to help you write quick model expressions more easily.
- Hide / Filter warnings: It's now possible to hide / filter out warnings in the error/warning pane based on warning ID. The hidden/filtered out warnings are viewable again using a toggle and which IDs are filtered out is stored in the project.
- Element selection rules on tasks (code generator). It's now possible to define selection rules on tasks in a run queue for the code generator which select which elements participate in the task, based on setting values. This makes it easy to define a setting for a user which is then taken into account in the code generator to execute different tasks based on the value of the setting.
- New refactoring: replace selected fields with existing value type. This makes it easier to work with value types in the designer: if a selected value type matches (based on a set of defined rules) the selected fields, the fields are replaced with the selected value type and mappings are adjusted accordingly.
- Automatically assign found sequences to entity fields based on a pattern (database first). Based on a name pattern the reverse engineering engine will select fields of entities which should get a sequence assigned to them, if the name pattern resolves to a name of a found sequence. This makes it easier to reverse engineer models from databases which use sequences for identity values, like Oracle and PostgreSQL.
- Allowed Action Combinations: Specify which actions are allowed on an entity instance: Any combination of Create/Read/Update/Delete. Supported on: LLBLGen Pro Runtime Framework (all combinations, R mandatory), NHibernate (CRUD and R). Action Combinations make it easy to define e.g. entities which can only be created or read but never updated nor deleted. The action combinations are defined at the mapping level and checked inside the runtime and are additional to the authorization framework.
Minor new features / changes
- Added a setting to control whether names are singularized during reverse engineering
- When a relationship is marked as 'ModelOnly', the backing FK (and UC) of the original relationship when it wasn't model only, are now removed from the relational model data if the FK (and UC) are created by the designer and if there's no other model element relying on them (e.g. another relationship). Previously, they're kept around.
- .NET 4.5.2 and 4.6 have been added as a supported platform
- A directive has been added to the designer's config file to enable (it's disabled by default) high-DPI winforms support on .NET 4.5.2 or higher.
- The designer now also integrates in VS.NET 2015
- Context menus for entities in project explorer and model views have been re-ordered and more commands have been added to make working with the elements through context menus more convenient.
- Stored procedure call parameters and Table-valued-function call parameters are now selectable in the code generation info tab and settings specifically for these elements will now show up there.
- SQL Server 2014 is now a supported database (through the SQL Server driver/templates).
-
When a typed view was mapped onto a stored procedure resultset, it
will now use the stored procedure name strip pattern instead of the
Table Valued Function strip pattern to produce a proper procedure
name for the macro
{$ProcFunctionName}
. - The default sorting on the error lister is no longer on 'Time' but on message type, Source so errors appear first, then warnings, and the messages are sorted within the message type on source, ascending.
- In a typed list, when a relationship join hint was changed, the project wasn't marked as 'changed'.
- When a project is loaded, all root nodes are now collapsed, which makes it easier to work with larger projects.
- When a new element is added to the project, e.g. entity or typed view either directly or through reverse engineering, the state of the root nodes are remembered so the root nodes no longer all expand when an element is added, only the root node of the added element(s) is expanded to show the new elements.
- Setting an existing field to a custom shortcut will set the maxlength/precision/scale In v4.2, setting an existing field to a shortcut which has a default length/precision/scale set will receive these values for maxlength/precision/scale, overwriting an existing value.
- Catalog names are now shown with sequences in the mapping UI, so with databases with multiple catalogs it's now more easy to select sequences from multiple catalogs.
- Sequences from other schemas and catalogs than the schema of the target of the mapping being edited are now selectible from the drop down in the field mapping editor.
- Multi-line input support in QuickModel: it's now possible to paste multiple lines with quick model statements in the input box, which are then executed one by one
- Preference names are now beautified. Preferences are now properly word broken and lower cased, and thus easier to read than the previous preferences which were equal to the camelcased property names.
- Typed list editor no longer shows the aggregate function column on fields. The aggregate function column is now hidden. It didn't make sense for all other frameworks but our own and even for our own framework it's not that useful: the aggregate function often returns a different type than the one it is placed on, and there was no way to specify the type (which is undefined at design time, as an aggregate function can return different kinds of types depending on which database it is run). In the future the feature will be redesigned if needed.
- Catalog explorer details are now automatically shown when a node is selected if details viewer is open.
- A 'Collapse Child Nodes' feature has been added to the context menu of certain nodes in project explorer and catalog explorer. All nodes which have child nodes which can have child nodes have now a 'Collapse Child Nodes' feature in their context menu, so it makes it easier to reset the tree to a workable form after many expand actions.
- PostgreSQL driver now also obtains materialized views as 'views'. Postgresql servers v9.3 or later required.
- It's now possible to define different default values for resultset retrieval. A driver will retrieve stored procedure resultsets using default values for the parameters of the procedures selected. At the wizard tab for stored procedure selection, the user can now click a button to define different default values for the supported value types (and string), to avoid stored procedures being excluded because they reject the original default values (e.g. a stored procedure which requires a value larger than 0 for an int parameter otherwise it will return with an error will now no longer do so if the default for int is set to a value larger than 0).
- License file can now also be placed in 'My Documents\LLBLGen Pro'
- Refreshing relational model data with custom properties now will only report a custom property value change. In previous versions the values weren't compared, causing a lot of noise in the report.
-
Support for
<DependentUpon>
element in CS/VBProj files (Code generator) - Support for default presets (Code generator)
- After a successful code generation action, the project is now saved automatically.
What's new in the LLBLGen Pro v4.1 designer
New designer preferences and project properties
The following Designer Preferences and Project Settings are new.
- PreferSystemSequencesOverSchemaSequencesIfApplicable (also project setting). When set to true (default), the designer will choose system sequences for identity fields instead of creating new / picking existing schema sequences, if schema sequences are supported by the database type. If the database type only supports one type of sequence, that type is chosen regardless of the value of this setting. A new project will inherit this value.
New / changed / fixed functionality
The following functionality is new, has been changed / updated or was fixed/corrected in this release.
Additions / changes
- The designer is now usable with Entity Framework v6, on .NET 4.0, 4.5 and 4.5.1
- .NET 4.5.1 is now a supported platform.
- The designer now also integrates into VS.NET 2013.
- DB2 and Oracle drivers now have a length limit defined, which is used in the designer when relational model element names are created, e.g. for tables and fields: the length limit is used to cut off long names and append a suffix if necessary.
- Suffixes for creating unique names are no longer based on underscores, but are now using a number, starting with 1. This avoids having long names with lots of underscores, which can be hard to distinguish from each other and also could overflow a length limit set on the driver used.
- The ModelView viewer now has an expand/collapse all context menu option, which first collapses all non-collapsed elements and then expands all, if there are no expanded elements.
- The ModelView now shows the relationship type (or if the entity is a sub/supertype) next to the direct related entities in the entity selector to add directly related entities to the model view.
- (Model first, SQL Server / DB2) It's now possible to choose between system sequences and auto-created schema sequences when forward mapping a new entity onto a new table. Previously, the designer always picked system sequences when available.
- Framework setting definitions now can have an optional attribute isVisible (default true) which when set to false, will hide the setting from the settings editors in the UI but will make the setting and its default value available to validators and to the templates during code generation. This allows for flexible configuration of the code generation process through settings without the necessity of templates which control the code generation process.
- 'Additional Namespaces' in the project settings now has a small help text with the macros available.
- The Oracle ODP.NET driver now supports the ODAC managed provider, first shipped with ODP.NET 12.
- The Oracle drivers now support Oracle 12c and 12c's identity/default sequences feature.
Fixes
- The checkboxes on the Fields grid are now directly posting the changed value to the backing field instead of doing that when the cell loses focus
- When changing the db type of a field in the field mappings pane, the db type name wasn't reflected in the UI immediately.
- When a field which has a type converter set, gets a different type and the type converter doesn't match anymore, it's automatically removed. This also then allows to get a different type converter set automatically through a different type conversion.
- If there's one model and there are two or more DBs in the project and at least one which doesn't support delete and/or update rules, setting update/delete cascade rule values on FKs goes wrong: it will sync the rules in the relationships to the FKs in the last refresh. It now correctly ignores rule overwrites which are not supported on the target DB.
Code generator / task performer specific changes
- The TaskPerformerBase.CreateFilename now has a new overload which is the only one which is virtual. The new overload accepts a groupName as new parameter.
-
[groupName]
is now a valid macro for filename specifications and folder specifications in task parameters. -
[elementName]
is now a valid macro for folder specifications in task parameters. -
EmitOutput and EmitOutputToFile methods of CodeGenerationEngineBase
have their destination folder parameter changed: the string passed
in is now the raw value obtained from the parameters, not the
processed destination folder. This way
[elementName]
and[groupName]
are handled for folder names as well.
What's new in the LLBLGen Pro v4.0 designer
New designer preferences and project properties
The following Designer Preferences and Project Settings are new.
- TableValuedFunctionNameStripPattern. This pattern is similar to the stored proc name strip pattern, except it's now used for constructing TvfCall names.
-
TypedViewMappedOnResultsetPattern. This pattern is used to
create the typedview name when it's been reverse engineered and it's
mapped onto a resultset of a stored proc or tvf. Marco elements:
{$ResultsetName}
and{$ProcFunctionName}
. Default:{$ProcFunctioName}{$ResultsetName}TypedView
.{$ResultsetName}
is ignored if the procedure or function has just one resultset. - DefaultRelationshipDeleteRuleAction. This setting controls the default value for the Delete Rule Action for new relationships. Update Rule and Delete Rule are used for cascade settings on the backing foreign key constraint (if applicable). Default: Cascade. In project settings, this setting is available under Model First development.
- DefaultRelationshipUpdateRuleAction. This setting controls the default value for the Update Rule Action for new relationships. Update Rule and Delete Rule are used for cascade settings on the backing foreign key constraint (if applicable). Default: NoAction. In project settings, this setting is available under Model First development.
Removed designer preferences / project properties
The following preferences / project settings have been removed.
- ShowProjectPropertiesAfterProjectCreate. This setting has been removed, as it's no longer used because the Actions Suggested/Available Actions window has taken over the task to tell the user to review the project settings after a project has been created.
New / changed / fixed functionality
The following functionality is new, has been changed / updated or was fixed/corrected in this release.
Additions
- Visual studio integration (2010/2012). The designer is now fully integrated in VS.NET 2010 and VS.NET 2012. The stand-alone designer is also available so you can choose in which environment you want to use the designer.
- Table Valued Functions support. The designer now supports Table Valued Functions in the designer, which allows you to map an entity or typed view on the resultset of the Table Valued Functions.
- Rule based .NET Additional Interfaces / Namespaces. It's now possible to specify a rule using fine-grained expressions with an additional interface or additional namespace to define which elements of a given type will receive the additional interface or additional namespace. Rules can be assigned to additional interfaces / namespaces on the project level, to make it even easier to define attribute definitions in bulk for many elements in the project.
- Update / Delete rules for FK constraints. It's now possible to define update / delete rules (Cascade rules) for relationships and Foreign Key constraints in both database first and model first.
- SQL Server 2012 Sequence support. The SQL Server driver now retrieves Sequence definitions from SQL Server 2012 databases, and allows you to use them in mappings. You can also create new sequences for SQL Server 2012 from within the designer, like you can for Oracle, DB2, Firebird and PostgreSql.
- Action suggestions window. **** The designer now offers an action suggestions window, which shows what actions are recommended, given the last action of the user, the state of the project / designer. The action suggestions window help with navigating the designer in common tasks, in case a particular feature might be hard to find.
- Custom type shortcuts now have default length/precision/scale. A type shortcut can now have a default length, precision and/or scale value which is automatically used when the type shortcut is used as a field type. This allows type aliasing and easier modeling: e.g. one could define a type shortcut called 'Email' which is a type shortcut to string with a length of 150.
- Char <-> String system type converter. The list of system type converters has been extended with a new char <-> string system type converter which allows you to map a char typed model element onto a DB element with type string of length(1). This is useful if you have char(1) fields in the database, which are often converted as 'string' by ADO.NET providers.
- Re-scan of enum .typeimport files. It's now possible to re-scan the folders which have .typeimport files for changes to import enum types while the designer is open. This makes importing enum types much easier as the designer doesn't have to be closed and re-opened again.
Changes
- The designer is now a .NET 4.0 application. No more .NET 4.0 runners needed.
- .NET 2.0 and .NET 3.0 are no longer supported as target platform.
- .typeimport files are now also searched in the folder where the llblgenproj file has been loaded from.
- The initial destination folder for generating code is now set to '.\', which means the project file location.
- If there's just one catalog in the project, the generated connection string will refer to that catalog as the catalog to connect to.
- Backup filenames are now named with the yyyyMMddHHmmss suffix.
- Code generators don't need destination folders to exist. The DirectoryCreator task is now redundant if you use the shipped code generators.
- Enum type checks are now less strict: the .net type of the db field has to be one of the allowed underlying .NET types for enums for .NET: sbyte, byte, ushort, short, uint, int, ulong, long. It doesn't have to match the underlying .NET type of the used enum type.
- Type shortcuts are automatically created for imported enum types if there's no type shortcut defined yet for the enum.