Skip to content

Full control over the generated code

Simon Hughes edited this page Sep 19, 2023 · 19 revisions

You can specify the following:

  • Filter tables, columns, views, stored procedures, table-valued functions and scalar-valued functions to just the minimum set you require. This is key to having a fast EntityFramework.
  • Generate FakeDbContext for easy unit testing.
  • Rename tables, columns and stored procedures in your DB context.
  • Generate separate files or a single file.
  • Generator type: Ef6 and EfCore 2-7, including your own custom variation.
  • Create enumerations from database tables.
  • Which database you are reverse engineering: SqlServer, PostgreSQL, or SqlCE...
  • Which name to give your DbContext class & interface.
  • What namespace you would like to use.
  • Supports multiple result sets from stored procedures.
  • Supports cross-database synonym tables.
  • Control if the schema name is prepended to the table name. This stops name conflicts if the same table name is used in different schemas
  • Ability to perform table renaming. Such as removing a prefix or certain characters from all the tables. Such as tblOrders to Orders, Shipments_AB to Shipments, etc.
  • Supports English Pluralisation and the ability to provide your own custom Pluralisation service.
  • Includes support for custom pluralisation dictionaries to override singular/pluralisation of words that are not supported by the main pluralisation service.
  • Which {{mustache}} templates to use: Ef6, EfCore2, EfCore3, EfCore5, EfCore6, or your own FileBased templates.
  • Ability to control exactly what is generated. Such as POCO classes, DbContext, DbContext interface, POCO Configuration/Mapping classes, Stored procedures and Enums. This is required for enterprise software where different parts of the configuration can exist in different folders or projects.
  • Ability to control usage of mapping tables.
  • Which connection string to use for the generator.
  • Which connection string name to use from your app.config/web.config/appsettings.json.
  • Additional base interfaces for your DB context interface. E.g. IDisposable
  • Which base classes for the DB context. E.g. for ASP.NET Identity use IdentityDbContext<ApplicationUser>
  • Ability to add a default (parameter-less) constructor to your DbContext.
  • Customize the name of the configuration classes. "Configuration", "Mapping", "Map", etc. This is appended to the POCO class name to configure the mappings.
  • Ability to make classes partial.
  • Optionally use PascalCase. This will rename the tables & fields to use PascalCase. If not, then table & field names will be left alone.
  • Ability to use C# 6 property initialisers to set defaults.
  • Ability to mark all navigation properties as virtual or not, to support or disable EF Lazy Loading feature.
  • Optionally include comments. This will add the non-PascalCased names of fields, primary keys and foreign keys as comments.
  • Optionally include extended properties as comments. You can also specify if they should appear in a summary block above the field, or at the end of the field. An extended property is the description field in a SQL Server database.
  • Optionally include comments describing connection settings used to generate the files.
  • Optionally include field name constants in your POCO's that match your properties. #741
  • Ability to disable geography types. This turns off DbGeography and DbGeometry as OData doesn't support entities with geometry/geography types.
  • What collection type to use for navigation properties. List (default), ObservableCollection for example.
  • What nullable shorthand to use. T? or Nullable<T>
  • Ability to specify a default IDbContextFactory implementation for easy dependency injection.
  • Ability to include the flag "OPTION (QUERYTRACEON 9481)" for use with SQL Server 2014 (SQL Server 2014 had a faulty query plan optimisation).
  • Control the use of the [GeneratedCode] attribute.
  • Control the use of private setters for computed columns.
  • Ability to specify additional namespaces to include in the generated code.
  • Ability to suppress placing the generated code in a #region.
  • Ability to suppress the writing of a namespace.
  • Ability to suppress the writing of #pragma.