簡體   English   中英

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

[英]Partial EF Context OnModelCreating Using 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)使用第三方工具或庫,例如: EF Core Power Tools

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM