Supported Constructs

The following LLBLGen Pro Designer constructs are supported for Entity Framework Core v2. Using an element not on this list will result in a validation error of the project.

Supported designer features

  • Entity mappings to tables
  • Single catalog per project
  • Multi-schema per project
  • Entity inheritance: target per Entity Hierarchy inheritance
  • 1:1, 1:n, m:1 relationships. Many to many relationships aren't supported by EF core.
  • Typed Lists
  • Value Type Definitions. Value Type Definitions are generated as 'Owned types' in the mappings.
  • Entity splitting (mapping multiple entities onto the same table with a 1:1 Pk-Pk relationship)
  • Derived models
  • Sequences
  • Model views
  • All .NET types for PKs
  • Enums (using .typeimports files, see the Designer documentation for details on this).
  • .NET 4.6.1 or higher.
  • C# and VB.NET
  • Relationship cascade rules
  • Action combinations on mappings. See below.

Supported databases

The following databases are supported. Although there's an EF Core provider for MySQL from DevArt, it's not supporting .NET core.

  • SQL Server 2000 and higher
  • PostgreSql (using Npgsql)
  • Firebird

Read-only entities

Read-only entities, through the action combinations in the mappings pane of an entity editor, are supported through custom annotations. The supported action combinations are 'Create, Retrieve, Update, Delete' and 'Retrieve'. This is implemented using this code: https://romiller.com/2017/02/14/ef-core-1-1-read-only-entities-extending-metadata-with-annotations/

You can specify an entity as 'readonly' by changing in the entity editor's Mappings tab the allowed action combinations to 'Retrieve' instead of the default 'Create/ Retrieve / Update / Delete'. If an entity is set as 'readonly' the modelbuilder will call the IsReadOnly extension method on the EntityTypeBuilder object for the entity. When such an entity is then persisted through SaveChanges(), it's checked whether the entity type has the readonly annotation set. If so, the SaveChanges() action is aborted with an exception. The exception is needed because it's not possible to filter out actions on the context, so a silent skip isn't possible.