-
Notifications
You must be signed in to change notification settings - Fork 226
Partial Adding extra model entites to generated DbContext
Simon Hughes edited this page Aug 23, 2022
·
4 revisions
It's easy to add other manually created models/entities to your Reverse POCO-generated DbContext.
Download an example solution: MixOfReversePocoAndManualEntities.zip
Some entities are generated, and some are manually written. All entities end up in the same database context, allowing Reverse POCO to overwrite its database context without losing any changes in your partial database context, which extends it with your own entities.
In your <database>.tt file, set
Settings.DbContextClassModifiers = "public partial";
Settings.DbContextInterfaceModifiers = "public partial";The above will generate a database context like:
// Generated database context interface
public partial interface IMyDbContext : IDisposable
{
...
}
// Generated db context
public partial class MyDbContext : DbContext, IMyDbContext
{
public MyDbContext()
{
InitializePartial(); // <-- See here
}
public MyDbContext(DbContextOptions<MyDbContext> options)
: base(options)
{
InitializePartial(); // <-- See here
}
protected override void OnModelCreating(ModelBuilder modelBuilder)
{
base.OnModelCreating(modelBuilder);
modelBuilder.ApplyConfiguration(new SomeGeneratedEntity());
...
OnModelCreatingPartial(modelBuilder); // <-- See here
}
// See here
partial void InitializePartial();
partial void DisposePartial(bool disposing);
partial void OnModelCreatingPartial(ModelBuilder modelBuilder);Having partial will allow you to add more functionality to your MyDbContext class and your interface class IMyDbContext in a separate file. Such as:
public partial interface IMyDbContext
{
// Add your entities here
DbSet<MyManuallyCreatedEntity> MyEntities { get; set; }
}
public partial class MyDbContext
{
// Add your entities here
public DbSet<MyManuallyCreatedEntity> MyEntities { get; set; }
partial void InitializePartial()
{
// Optional. Any initialisation during constructor can be done here.
}
partial void OnModelCreatingPartial(ModelBuilder modelBuilder)
{
// Add your configuration classes here
modelBuilder.ApplyConfiguration(new MyManuallyCreatedEntityConfiguration());
}
partial void DisposePartial(bool disposing)
{
// optional
}
}- Home
- Compared with the Microsoft scaffolder
- Connection strings
- JetBrains Rider
- Upgrading from v3 to v4
- Saving .tt does nothing
- Settings A-Z - every setting, with a page each
- Common Settings Types Explained
- Settings Callbacks
- Settings runtime values and helpers
- Filtering
- Full Control Over the Generated Code
- Enum Generation from Table Data
- Owned Entities
- JSON column support
- Global Query Filters
- Extended Property Names Feature
- Partial Properties
- File-Scoped Namespaces
- Data Annotations
- Spatial Types
- HierarchyId
- RowVersion and TimeStamp columns
- Lazy Loading
- Stored proc result sets