c# - 实体核心中的IDbSet <T>在哪里-LMLPHP

public abstract class RepositoryBase<T> : IRepository<T> where T : class
{
    private ShopCoreDbContext dbContext;
    private readonly DbSet<T> dbSet; //here
    protected IDbFactory DbFactory { get; private set; }
    protected ShopCoreDbContext DbContext
    {
        get => dbContext ?? (dbContext = DbFactory.Init());
    }
    protected RepositoryBase(IDbFactory dbFactory)
    {
        DbFactory = dbFactory;
        dbSet = DbContext.Set<T>();
    }
    public virtual T Add(T entity)
    {
        return dbSet.Add(entity); //err here
    }
}

使用IDbSet不会发生任何事情。但是IDbSet接口(interface)不再存在于实体核心中。这是错误详细信息:



它要求它必须是一个接口(interface)。
那我现在该怎么办?

最佳答案

要解决您眼前的问题:Add方法不直接返回实体,而是包装器实体。使用其.Entity属性获取值(或返回传入的值):

    public virtual T Add(T entity)
    {
        return dbSet.Add(entity).Entity;
    }
关于IDbSet<T>接口(interface):Entity Framework Core没有IDbSet<T>接口(interface)。
根据this GitHub issue的说法,没有计划将其恢复,因为DbSet<T>现在是一个抽象基类,可以用来模拟测试或子类化:

关于c# - 实体核心中的IDbSet <T>在哪里,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/48363894/

10-11 18:07