使用Scaffold-DbContext的部分EF上下文OnModelCreating

时间:2018-12-06 14:20:48

标签: c# .net-core entity-framework-core

我正在使用数据库优先开发,并使用Scaffold-DbContext创建我的实体模型项目。在那个项目中,我有一个局部的dbContext,其中我重写了诸如SaveChangesAsync之类的方法来设置某些属性,例如“ LastModifiedBy”。

我希望使用dateDeleted / userDeleted列对记录进行软删除。当我去重写OnModelCreating例程时,我看到它已经在自动生成的部分上下文中定义了。

我正在尝试执行以下操作:

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

有人对我如何以部分类方式执行此操作仍然有任何建议,该方法仍允许我使用Scaffold-DbContext动态地重新生成原始上下文吗?

还请注意,我正在使用.NET Core 2.1.5

大卫·布朗(David Browne)的答复-微软

在部分上下文中添加静态属性

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

然后添加一个例程以添加过滤器:

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

然后在您生成的上下文中添加以下内容:

protected override void OnModelCreating(ModelBuilder modelBuilder)
{
    AddGlobalFilters(modelBuilder);
    //OTHER LOGIC WILL BE HERE
}

1 个答案:

答案 0 :(得分:0)

选项:

1)重新构建支架后,删除生成的OnModelCreating。这已经是一个手动过程,如果您忘记了,则会生成一个编译错误。

2)使用从生成的DbContext继承的DbContext。

3)使用第三方工具或库,例如:this