我有一個攜帶一些資訊的類,我把這些資訊存盤在DB中。
class SomeThing
{
public Guid Id { get; set; }
public string Name { get; set; }
public string Info => "extra info"/span>;
}
自然地,最后一個屬性被EF通過entity.Ignore(a => a.Info);省略了。現在,我希望文本extra info可以從appsettings.json中設定,所以我引入了一個選項提供者,并使用建構式將其注入(在Startup.cs中注冊了它)。DI要求我使用一個引數化的建構式,而EF要求一個無引數的建構式,所以我的類變得有點堵塞。
class SomeThing
{
private IOptions< Config> Config { get; }
public SomeThing() { }
public SomeThing(IOptions<Config> config)
{
配置 = 配置。
}
public Guid Id { get; set; }
public string Name { get; set; }
public string Info => Config.Value.Info;
}
現在,這種笨拙的復雜性讓我懷疑我的設計有缺陷。另外,我不知道EF應該如何注入選項的值,因為它依賴于無引數的建構式。我考慮過實作空的建構式并以某種方式獲取服務,手動獲取值,但在我看來這是一個巨大的紅旗。
我應該如何設計這樣一個類?
我應該如何設計這樣一個類?
uj5u.com熱心網友回復:
無論這是否是一個有問題的設計決定,你都應該將這項作業委托給一個資源庫類。
ThingRepo.GetSomeThing()獲取物體并在需要時填充Info屬性。然后它可以在建構式中注入IOptions<T>/code>。
class ThingRepo
{
private Config _config;
private DbContext _db;
public ThingRepo(IOptions< Config> config, DbContext db)
{
_db = db;
_config = config.Value;
}
public async Task<Thing> GetSomeThing()
{
var thing = await _db.Set<Thing> ().FirstAsync()。
thing.Info = _config.Info;
return thing;
}
這就規避了必須在物體建構式中要求IOptions<T>的限制。
uj5u.com熱心網友回復:
由于SomeThing是你的資料庫的一個物體定義,我會避免嘗試使用DI來注入選項。 我認為在EF Core中不支持這種情況。
如果你真的需要訪問Info物件,你可以參考一個與DI兼容的不同的服務,但話說回來,從你呼叫的任何代碼中直接訪問Info,從SomeThing中訪問Info不是更容易嗎?
通常情況下,EF核心是用于在資料庫中存盤資料。
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/309853.html
標籤:
上一篇:自動映射器的嵌套映射和分組
