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/