Partial EF Context OnModelCreating Using Scaffold-DbContext

.net-core c# entity-framework-core

Question

I'm using doing database first development and using Scaffold-DbContext to create my entity models project. In that project, I have a partial dbContext where I override methods like SaveChangesAsync to set certain properties like, "LastModifiedBy".

I'm looking to soft-delete records using dateDeleted/userDeleted columns. When I go to override the OnModelCreating routine, I see that it's already defined on the auto-generated partial context.

I'm trying to do something like the following:

protected override void OnModelCreating(ModelBuilder modelBuilder)
{
    modelBuilder.Entity<SomeEntity>().HasQueryFilter(x => x.DateDeleted == null);
}

Does anyone have any suggestion as to how I can do this in a partial class way that still allows me to regenerate the original context on the fly using Scaffold-DbContext?

Also note, I'm using .NET Core 2.1.5

ANSWER FROM David Browne - Microsoft

Add a static property on the partial context

public static bool GlobalFiltersAdded { get; set; } = false;

Then add a routine to add your filters:

private void AddGlobalFilters(ModelBuilder modelBuilder){
    SomeContext.GlobalFiltersAdded = true;
}

Then in your generated context add the following:

protected override void OnModelCreating(ModelBuilder modelBuilder)
{
    AddGlobalFilters(modelBuilder);
    //OTHER LOGIC WILL BE HERE
}
1
0
1/14/2019 3:25:30 AM

Accepted Answer

Options:

1) Delete the generated OnModelCreating after re-scaffolding. It's already a manual process, and generates a compile error if you forget.

2) Use a DbContext inherited from the generated DbContext.

3) Use a 3rd party tool or library like: EF Core Power Tools

0
12/6/2018 2:36:09 PM


Related Questions





Related

Licensed under: CC-BY-SA with attribution
Not affiliated with Stack Overflow
Licensed under: CC-BY-SA with attribution
Not affiliated with Stack Overflow