我正在try 创建一个类库,它可以使用DbContext来查询具有公共模式的实体.(这是DB的第一个项目)

我的类库项目中有以下内容:

    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)
    }

提前感谢大家的帮助

推荐答案

可以在方法上使用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;
}

Csharp相关问答推荐

为什么这个Reflection. Emit代码会导致一个DDL ViolationException?

AsNoTrackingWithIdentitySolutions()似乎不起作用?

Azure Redis缓存与Entra ID身份验证

自动映射程序在GroupBy之后使用项目

HttpConext.Request.Path和HttpConext.GetEndpoint()之间的差异

在使用Audit.NET的AuditTrail实现中,如何逐月将数据摄取到AzureTableStorage?

C# CompareTo()和Compare()可以返回除-1和1以外的整数吗?

从VS调试器而不是测试资源管理器运行的调试NUnitDotNet测试

如果是,我怎么才能让这个加75,如果不是,我怎么才能减go 100?

如何让两个.NET版本不兼容的项目对话?

序列化过程中的死循环

从GRPC连接创建ZipArchive

我是否应该注销全局异常处理程序

RavenDb:为什么在字符串==空的情况下过滤会过滤得太多?

SharpZipLib在文件名前加上目录名,生成tar.gz

使用ITfoxtec.Identity.Saml2解析相同键多值SAML 2声明

为什么我的UserControl没有加载到我的主窗口中?

无法通过服务控制台启动.NET Core 6.0服务(错误1053)

如何在Blazor 8 RC2静态模式下以编程方式导航到另一个页面

自定义C#链接调用未按预期运行