DbContext創建a 后,是否可以提取 DbContextOptions用于創建它的 ?
(也許通過使用類似于RelationalOptionsExtension.Extract()EF 基礎設施服務等的東西)
uj5u.com熱心網友回復:
沒有官方(公共)方式。但是您可以使用兩種(內部)基礎結構方法來獲取它。
首先是GetService<TService>位于AccessorExtensions類中的擴展方法,然后可用于獲取IDbContextServices服務實體 - 未記錄,但其成員之一是
IDbContextOptions ContextOptions { get; }
這正是您所需要的。
所以代碼是這樣的:
using Microsoft.EntityFrameworkCore;
using Microsoft.EntityFrameworkCore.Infrastructure;
using Microsoft.EntityFrameworkCore.Internal;
DbContext dbContext;
var dbOptions = db.GetService<IDbContextServices>().ContextOptions;
請注意,回傳型別是介面,但可以根據需要強制轉換為DbContextOptions。
uj5u.com熱心網友回復:
我使用的是一個工廠方法,它可以回傳一個DbContext或一個DbContextOptions物件。之后我在 DI (Autofac) 或 unitests(通常是記憶體資料庫)中使用它。
如果這不是一個選項,您可能可以使用反射并創建一個擴展方法來private readonly DbContextOptions _options;從 DbContext 物件回傳私有欄位。這是一種黑客和解決方法,如果您控制 DbContext 的實體化,我將使用選項一。
uj5u.com熱心網友回復:
OnConfiguring為每個 DbContext 實體運行,因此您可以覆寫它以檢查和修改傳入的 DbContextOptionsBuilder。
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/381536.html
標籤:C# 实体框架 实体框架核心 数据库上下文 ef-core-5.0
