C# 如何使用数据库集<;T>;使用泛型类型

C# 如何使用数据库集<;T>;使用泛型类型,c#,generics,interface,generic-programming,dbset,C#,Generics,Interface,Generic Programming,Dbset,我有一个界面: public interface ILanguageEntity { int Id { get; set; } string Name { get; set; } string Code { get; set; } string Culture { get; set; } string LocalName { get; set; } bool IsRightToLeft { get; set; } } 我将其作为一个实体

我有一个界面:

public interface ILanguageEntity
{
    int Id { get; set; }

    string Name { get; set; }

    string Code { get; set; }

    string Culture { get; set; }

    string LocalName { get; set; }

    bool IsRightToLeft { get; set; }
}
我将其作为一个实体来实现,如下所示:

public class LanguageEntity : ILanguageEntity
{
    public int Id { get; set; }

    public string Name { get; set; }

    public string Code { get; set; }

    public string Culture { get; set; }

    public string LocalName { get; set; }

    public bool IsRightToLeft { get; set; }
}
public class LanguageService : ILanguageService
{
    public ApplicationContext Context { get; set; }

    public DbSet<ILanguageEntity> DbSet { get { return Context.Set<LanguageEntity>(); } }

}
在我的服务中,我希望此实体有一个属性,该属性返回其数据库集,如下所示:

public class LanguageEntity : ILanguageEntity
{
    public int Id { get; set; }

    public string Name { get; set; }

    public string Code { get; set; }

    public string Culture { get; set; }

    public string LocalName { get; set; }

    public bool IsRightToLeft { get; set; }
}
public class LanguageService : ILanguageService
{
    public ApplicationContext Context { get; set; }

    public DbSet<ILanguageEntity> DbSet { get { return Context.Set<LanguageEntity>(); } }

}
公共类语言服务:ILanguageService
{
公共应用程序上下文{get;set;}
公共DbSet DbSet{get{return Context.Set();}
}

但这是不可能的,因为我正在返回一个
DbSet
类型,而我必须按照编译器所说的返回一个
DbSet
类型。我该怎么办呢?

我假设
ApplicationContext
至少应该有一个
I语言实体
DbSet

以下是我的想法:

public class LanguageService : ILanguageService
{
    public ApplicationContext Context { get; set; }

    public DbSet<ILanguageEntity> DbSet
    {
        get
        {
            return Context.LanguageEntities;
        }
        set
        {
            throw new NotImplementedException();
        }
    }
}

public class ApplicationContext : DbContext
{
    public DbSet<ILanguageEntity> LanguageEntities { get; set; }
}

public interface ILanguageService
{
    DbSet<ILanguageEntity> DbSet { get; set; }
}
公共类语言服务:ILanguageService
{
公共应用程序上下文{get;set;}
公共数据库集
{
收到
{
返回Context.LanguageEntities;
}
设置
{
抛出新的NotImplementedException();
}
}
}
公共类应用程序上下文:DbContext
{
公共DbSet语言实体{get;set;}
}
公共接口ILanguageService
{
DbSet DbSet{get;set;}
}

只是好奇,为什么您需要为您的模型语言实体提供更多接口?因为我正在尝试使我的项目模块化,我需要从其他模块访问语言实体,而其他模块不知道语言实体在哪里。但是,他们知道如何使用LanguageService。如果我为DbSet使用接口而不是类,迁移将在尝试更新数据库时返回并出错。这是错误:未映射类型“RPSP.Framework.ienties.Language.ILanguageEntity”。检查是否未使用Ignore方法或NotMappeAttribute数据批注明确排除该类型。验证该类型是否定义为类、是否为基元或泛型,以及是否从EntityObject继承。