This is an Entity Framework Core 2.1+ extension for the Microsoft Scaffold-DbContext
database-first scaffolder that allows you to:
- Use lazy loading for all related entities (
virtual
keyword) - Use EFCore.Pluralizer entity name pluralizer by Brice Lambson
- Change the base class of the generated
MyDbContext
class (as may be needed when integrating with the IdentityServer)
public partial class MyDbContext
: IdentityDbContext<User, Role, int, UserClaim, UserRole, UserLogin, RoleClaim, UserToken>
{
...
}
- Import additional assemblies as part of the generated
MyDbContext
class (e.g.using Microsoft.AspNetCore.Identity.EntityFrameworkCore;
) - Override base classes and interfaces of any of the generated entities (for integration with libraries like IdentityServer and implementation of
IAuditableEntity
-style interfaces)
public partial class User : IdentityUser<int>, IAuditableEntity
{
...
}
public partial class Vehicle : IAuditableEntity
{
...
}
- Add the following package to your startup project:
Install-Package ClearBlueDesign.EntityFrameworkCore.Scaffolder -Pre
- Add
scaffolder.json
file at the root of the project and configure custom scaffolding options as needed. - Add
DesignTimeServices.cs
file containingDesignTimeServices
class that implementsIDesignTimeServices
interface (so that theClearBlueDesign.EntityFrameworkCore.Scaffolder
is injected intoScaffold-DbContext
pipeline):
public class DesignTimeServices : IDesignTimeServices {
public void ConfigureDesignTimeServices(IServiceCollection services) {
services.AddScaffolder();
}
}
- Run scaffolding command with the desired base scaffolder parameters:
Scaffold-DbContext
"<CONNECTION-STRING>"
"Microsoft.EntityFrameworkCore.SqlServer"
-Context "MyDbContext"
-ContextDir "Data"
-OutputDir "Data\Entities"
-Tables "Product","ProductNote","ProductHistory"
This scaffolder extension supports all of the official Scaffold-DbContext
options (see here).
All of the new scaffolder options should be specified inside the scaffolder.json
file at the root of the project:
{
"Scaffolding": {
"UsePluralizer": true,
"UseDataAnnotations": false
},
"DbContext": {
"Base": "DbContext"
},
"EntityType": {
"UseLazyLoading": true,
"BaseMappings": {
"<TableName1>": [ "MyBaseClass1", "IContract" ],
"<TableName2>": [ "MyGenericClass1<Int32>", "IContract" ]
"<TableName3>": [ "IContract" ]
},
"PropertyMappings": {
"<EntityTypeA>": {
"<ColumnNameA>": "<PropertyNameA>",
"<ColumnNameB>": "<PropertyNameB>",
},
"<EntityTypeB>": {
"<ColumnNameC>": "<PropertyNameC>",
"<ColumnNameD>": "<PropertyNameD>",
}
}
"LoadAssemblies": [
"My.Awesome.Project"
]
}
}
- Add support for entity-level data validations using partial entity classes with validation attributes (
[MetadataObject(typeof(Vehicle.Metadata)], [AssertThat], [RequiredIf]
, etc),IValidatableObject
, andValidateEntity
override on the generatedMyDbContext
. - Add support for scaffolding of stored procedures into the generated
MyDbContext
using query types.
Want to file a bug, contribute some code, or improve documentation? Excellent! Read up on our guidelines for contributing and then check out one of our issues in the hotlist: community-help.
This project is licensed under the MIT license.