我的项目有NLayer架构。
我的持久层依赖于域层,但域层不了解实体模型。
同样,我的业务层依赖于域层,并且不了解实体模型。
在编写业务层时,我应用一些谓词逻辑来过滤存储库中的数据。
但是,使用域模型Expression<Func<TDomain, bool>>
应用此谓词逻辑,而实体框架与Expression<Func<TEntity, bool>>
一起使用。
如何转换谓词?
该问题是否有解决方法?
基础存储库的实施
namespace MyProject.Entity
{
public abstract class BaseRepository<TId, TDomain, TEntity> : IRepository<TId, TDomain>
where TId : struct
where TDomain : class
where TEntity : class
{
protected readonly DbContext _dbContext;
public BaseRepository(DbContext dbContext)
{
_dbContext = dbContext;
}
public void Add(TDomain objDomain)
{
var entityObj = objDomain.MapTo<TDomain, TEntity>();
_dbContext.Set<TEntity>().Add(entityObj);
objDomain = entityObj.MapTo<TEntity, TDomain>();
}
public void AddRange(IEnumerable<TDomain> domainObjects)
{
var entityObjects = domainObjects.Select(x => x.MapTo<TDomain, TEntity>());
_dbContext.Set<TEntity>().AddRange(entityObjects).ToList();
domainObjects = entityObjects.Select(x => x.MapTo<TEntity, TDomain>());
}
public void Delete(TId id)
{
var objectToRemove = _dbContext.Set<TEntity>().Find(id);
if (objectToRemove != null)
{
_dbContext.Set<TEntity>().Remove(objectToRemove);
}
}
public IEnumerable<TDomain> Find(Expression<Func<TDomain, bool>> predicate)
{
return _dbContext.Set<TEntity>().Where(predicate);
}
public TDomain Get(TId id)
{
return _dbContext.Set<TEntity>().Find(id).MapTo<TEntity,TDomain>();
}
public IEnumerable<TDomain> GetAll()
{
return _dbContext.Set<TEntity>().Select(x=>x.MapTo<TEntity,TDomain>()).ToList<TDomain>();
}
}
}