首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何将DbSet<Team>转换为DbSet<EntityBase>

如何将DbSet<Team>转换为DbSet<EntityBase>
EN

Stack Overflow用户
提问于 2016-08-22 19:13:30
回答 2查看 784关注 0票数 0

我有一个对从EntityBase派生的实体执行一些基本操作的RepositoryBase类。

代码语言:javascript
复制
public class RepositoryBase
    {
        private ApplicationDbContext _context;
        public DbSet<EntityBase> DbSet;

        public RepositoryBase(ApplicationDbContext context )
        {
            _context = context;

        }

        public List<EntityBase> List(int entityStatus)
        {
            return DbSet.Where(a => a.EntityStatusId == entityStatus).OrderBy(a => a.Name).ToList();
        }


        public EntityBase GetTeamDetails(int id)
        {
            return this.DbSet.FirstOrDefault(a => a.Id == id);

        }

        internal List<EntityBase> ListActive()
        {
            return DbSet.Where(a => a.EntityStatusId == (int)EntityStatus.Active).ToList();
        }

        internal List<EntityBase> ListTrashed()
        {
            return DbSet.Where(a => a.EntityStatusId == (int)EntityStatus.Trashed).ToList();
        }

        public void SaveProject(EntityBase item)
        {
            DbSet.Attach(item);
            _context.Entry(item).State = EntityState.Modified;
            _context.SaveChanges();

        }

        public List<EntityBase> ListArchived()
        {
            return DbSet.Where(a => a.EntityStatusId == (int)EntityStatus.Archived).ToList();
        }

        internal List<EntityBase> Search(string searchText)
        {
            return DbSet.Where(a => a.Name.Contains(searchText)).ToList();
        }

        public EntityBase New(EntityBase item)
        {
            DbSet.Add(item);
            _context.SaveChanges();
            return item;
        }
    }

我遇到的问题是将DbSet传递给基类。这就是我想要做的:

代码语言:javascript
复制
public TeamRepository(ApplicationDbContext context) : base(context)
{
            this.DbSet = (DbSet<EntityBase>)context.Teams;
}

但是,这不能编译。它说,即使Team是从EntityBase派生的,它也不能从DbSet转换为DbSet。

我该怎么做这个演员?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2016-08-22 19:22:52

您可以通过以下方式使其泛型:

代码语言:javascript
复制
public class BaseRepository<T> : IBaseRepository<T> where T : EntityBase
{
    public BaseRepository(CustomDBContext context)
    {
        if (context == null)
        {
            throw new ArgumentNullException("context", "The given parameter cannot be null.");
        }
        this.Context = context;
    }

    protected ApplicationDbContext Context
    {
        get;
        private set;
    }

    public T Get(int id)
    {
        return Context.Set<T>().Find(id);
    }


   .....

}
票数 1
EN

Stack Overflow用户

发布于 2016-08-22 19:18:46

你不能这样做。您可以做的是:

代码语言:javascript
复制
this.DbSet = context.Set<EntityBase>();
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/39078086

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档