最佳答案
public abstract class RepositoryBase<T, TDbContext> : IRepository<T> where T : IDomainEntity where TDbContext : DbContext
{
private readonly DbSet<T> _dbset;
private readonly IAmbientDbContextLocator _contextLocator;
protected RepositoryBase(IAmbientDbContextLocator ctxLocator)
{
if (ctxLocator == null) throw new ArgumentNullException(nameof(ctxLocator));
_contextLocator = ctxLocator;
_dbset = _contextLocator.Get<TDbContext>.Set<T>();
}
protected DbSet<T> DbSet { get { return _dbset; } }
public T Get(Guid id)
{
return DbSet.Find(id);
}
}
如果您不想使用
TDbContext
,则可以在DbContext
旁边的构造函数上发送contextlocator
。但是他强迫您使用DbContextScope
,我没有阅读所有文章,但我们不要破坏他的逻辑。关于c# - 具有通用存储库的DbContextScope,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/35866270/