我正在使用存储库模式,并试图构建一个通用方法,因为我有几个对象以相同的方式从它们的存储库中提取:
我的存储库的创建方式如下:
public interface IEntityRepository<T> : IDisposable
public interface IAuditorRepository : IEntityRepository<Auditor>
public class AuditorRepository : IAuditorRepository
审计员类别定义如下:
public class BaseEntity : IObjectWithState
public partial class Auditor : BaseEntity
除了AuditorRepository,我还有一些其他的,比如BuildingRepository。现在我正在尝试创建一个通用方法,在其中我可以传递Repository:
public List<EditSelectItemViewModel> GetItems<T>(IEntityRepository<T> repos) where T : BaseEntity
{
var d = repos.All.Where(x => x.isActive).OrderBy(x => x.Name).Include(z => z.Contracts)
.Select(y => new EditSelectItemViewModel
{
Id = y.Id,
SourceName = y.Name,
DisplayOnNew = y.DisplayOnNew,
NumberOfTimesUsed = y.ActiveContracts.Count(a => a.isActive)
}).ToList();
return d;
}
但我一直在上出错。其中指出这是一个模棱两可的引用。所有存储库都实现All方法,例如AuditorRepository版本:
public IQueryable<DomainClasses.Auditor> All
{
get { return _context.Auditors; }
}
IEntityRepostory定义为:
public interface IEntityRepository<T> : IDisposable
{
IQueryable<T> All { get; }
//List<T> AllRequests { get; }
IQueryable<T> AllIncluding(params Expression<Func<T, object>>[] includeProperties);
T Find(params object[] keyValues);
void InsertOrUpdateGraph(T entityGraph);
void InsertOrUpdate(T entity);
void Delete(params object[] keyValues);
}
baseEntity为:
public class BaseEntity : IObjectWithState
{
public State State { get; set; }
}
状态定义为:
public interface IObjectWithState
{
State State { get; set; }
}
public enum State
{
Added,
Unchanged,
Modified,
Deleted
}