c# - 部分 EF 上下文 OnModelCreating 使用 Scaffold-DbContext
问题描述
我正在使用数据库优先开发并使用 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)重新搭建后删除生成的OnModelCreating。这已经是一个手动过程,如果您忘记了会产生编译错误。
2) 使用从生成的 DbContext 继承的 DbContext。
3) 使用 3rd 方工具或库,例如:EF Core Power Tools
推荐阅读
- python - 使用变量实例化时如何调用特定对象?
- reactjs - 在反应中显示新闻api的所有结果
- r - 如何在 RHS 上使用矩阵项理解/扩展 r 公式
- javascript - Angular OnPush 更改检测传播到 ngFor 循环中的子组件
- excel - 使用条件格式应用过滤器框
- regex - 具有精确数字的特定字符串的正则表达式
- java - 尝试处理 catch 块时出错
- fortran - Fortran中两个小数相减得到零
- openai-gym - When i run docker official GPG key i got error
- python-3.x - Unable to run a command in the background using subprocess