我正在嘗試創建一個可以使用 DbContext 的類別庫,該 DbContext 將能夠查詢具有通用模式的物體。(這是資料庫第一個專案)
我的類別庫專案中有以下內容:
public interface ITranslate
{
public long Id
public long ParentId
public long LangId
}
在一個單獨的專案中,我將擁有以下內容:
public partial class SectionTranslation : ITranslate
{
public string SectionName { get; set; }
{
在另一個專案中,我可能有以下
public partial class TemplateTranslation : ITranslate
{
public string TemplateName { get; set; }
{
我想做的是使以下合同成為現實,但是,我不確定如何處理這個合同。我希望能夠回傳與 GetBestTranslation 方法中的常見查詢匹配的記錄,我希望回傳 SectionTranslation 或 TemplateTranslation 物體,具體取決于哪個專案正在使用該庫,并在 SaveTranslation 方法中保存翻譯記錄。
public interface ITranslateManager
{
Task<T> GetBestTranslationAsync(long langId);
Task CreateTranslationAsync<T>(long langId)
}
預先感謝大家的幫助
uj5u.com熱心網友回復:
您可以在 Method 上使用 where 條件。
public class TranslateManager : ITranslateManager
{
private readonly ContextDb _contextDb;
public TranslateManager(ContextDb contextDb)
{
_contextDb = contextDb;
}
public async Task CreateTranslationAsync<T>(long langId) where T : class, ITranslate
{
// ToDo
}
public async Task<ITranslate> GetBestTranslationAsync<T>(long langId) where T : class, ITranslate
{
var dbSet = _contextDb.GetDbSet<T>();
return await dbSet.Where(x => x.LangId == langId).FirstOrDefaultAsync();
}
}
public interface ITranslate
{
public long Id { get; set; }
public long ParentId { get; set; }
public long LangId { get; set; }
}
public partial class SectionTranslation : ITranslate
{
public long Id { get; set; }
public long ParentId { get; set; }
public long LangId { get; set; }
public string SectionName { get; set; }
}
public partial class TemplateTranslation : ITranslate
{
public long Id { get; set; }
public long ParentId { get; set; }
public long LangId { get; set; }
public string TemplateName { get; set; }
}
public interface ITranslateManager
{
Task<T> GetBestTranslationAsync<T>(long langId) where T : class, ITranslate;
Task CreateTranslationAsync<T>(long langId) where T : class, ITranslate;
}
uj5u.com熱心網友回復:
您可以通過執行以下操作簡單地訪問您的 dbContext:
protected readonly PostgisDbContext Context;
protected Service(PostgisDbContext context) : base(context)
{
Context = context;
}
使用這個背景關系非常容易。Type您可以通過將傳入的通用函式與現有的資料集表相匹配,在您的背景關系中請求資料集Type。不要忘記添加where : T : class這將告訴函式泛型Type T是由您在呼叫中提供的類分配的。
public Task<T> GetAsync(long langId) where : T : class
{
Context.Set<T>().Where(predicate).FirstOrDefault();
}
如果您需要代碼更加動態,可以添加謂詞作為其引數。這將允許您使用查詢不同的查詢,而無需創建新函式。例如x => x == true.
public Task<T> Get(Func<T, bool> predicate) => Context.Set<T>().Where(predicate).FirstOrDefault();
要呼叫該方法,您必須告訴函式泛型Type是什么。你這樣做:
_translationService.GetAsync<MyClass>(parameter);
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/480069.html
