我使用没有DbContext
类的接口实现通用数据访问层;这是代码
public interface IGenericDataRepository<T> where T : class
{
IList<T> Get(Func<T, bool> filter, int page, int pageSize, string[] includePaths = null, params SortExpression<T>[] sortExpressions);
}
这是具体实施:
public class GenericDataRepository<T> : IGenericDataRepository<T>
where T : class
{
private readonly Func<DbContext> _contextFactory;
public GenericDataRepository(Func<DbContext> contextFactory)
{
_contextFactory = contextFactory;
}
public virtual IList<T> Get(Func<T, bool> filter, int page, int pageSize, string[] includePaths = null, params SortExpression<T>[] sortExpressions)
{
List<T> list;
using (var context = _contextFactory())
{
IQueryable<T> dbQuery = context.Set<T>();
list = dbQuery.ToList<T>();
}
return list;
}
}
重要:具体类采用DbContext
参数,因为这个通用存储库将从不同的模块调用,并且它们具有自己的DbContext
。
现在我使用此代码从其他图层调用此存储库
public interface IBusinessLayer
{
void AddCountries(params Country[] Countries);
}
public class BusinessLayer : IBusinessLayer
{
Func<AccountingDBContext> _dbcontext;
public void AddCountries(params Country[] Countries)
{
var repository = new GenericDataRepository<Country>(_dbcontext);
//repository.Add(Countries);
}
}
我的问题出现在我调用此存储库的位置(上面的代码)。
错误是永远不会分配_dbcontext
。我认为Func<AccountingDBContext> _dbcontext;
中存在一些问题。