Skip to content

Partial Adding extra model entites to generated DbContext

Simon Hughes edited this page Aug 14, 2022 · 4 revisions

It's easy to add additional manually created models/entities to your Reverse POCO generated DbContext. In your <database>.tt file, set

Settings.DbContextClassModifiers     = "public partial";
Settings.DbContextInterfaceModifiers = "public partial";

This will generate a db context like:

// Generated db 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);

This will allow you to add more functionality to your MyDbContext class and your interface class IMyDbContext in a separate file that is not generated:

public partial interface IMyDbContext
{
    DbSet<MyManuallyCreatedEntity> MyEntities { get; set; }
}

public partial class MyDbContext
{
    public DbSet<MyManuallyCreatedEntity> MyEntities { get; set; }

    partial void InitializePartial()
    {
        // Any initialisation during constructor can be done here
    }

    partial void OnModelCreatingPartial(ModelBuilder modelBuilder)
    {
        modelBuilder.ApplyConfiguration(new MyManuallyCreatedEntityConfiguration());
    }

    partial void DisposePartial(bool disposing)
    {
        // optional
    }
}

Clone this wiki locally