我正在四處尋找一種方法來統一一些資料庫的資料訪問層,這些資料庫具有相同的欄位型別但駐留在不同的 EF DB 背景關系中。我想出了這樣的東西(請忽略字串插值,這只是一個原型):
public static T FetchEvent<T>(System.Data.Entity.DbContext dbContext, int eventId) where T : class, IEvent
{
var record = dbContext.Database.SqlQuery<T>($"SELECT * FROM Events WHERE EventId = {eventId}").SingleOrDefault();
return record;
}
每個資料庫都有一個 Events 表,相關的 EF 物體實作 IEvent,其中 IEvent 只是模擬表結構的欄位及其資料型別。使用通用 T 引數,在檢索記錄時由呼叫代碼指定正確的本地 EF 物體型別。
代碼運行并回傳記錄,但是動態代理物件上的 EF 背景關系為空,因此您無法對物體進行任何更新。
我的問題:當我以這種方式檢索記錄時,有沒有辦法讓 EF 背景關系持續存在?
uj5u.com熱心網友回復:
由于所有事件都具有相同的欄位,這些欄位可以被提取到介面并假設具體T的被映射到相應的背景關系,您可以使用以下DbContext.Set<T>方法:
public interface IEvent
{
public int EventId {get; set;}
// rest of the props
}
public static T FetchEvent<T>(System.Data.Entity.DbContext dbContext, int eventId) where T : class, IEvent
{
var record = dbContext
.Set<T>()
.Where(e => e.EventId == eventId)
.SingleOrDefault();
return record;
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/407998.html
標籤:
上一篇:EntityFrameworkCoreAddMigration給出的值不能為空。dotnet中的(引數“connectionString”)
