我已将服务添加到我的MVC / EF项目中,以充当我的控制器和存储库之间的层。
我无法将方法从repo复制到服务。我正在尝试在服务中使用Count()
但仍然收到错误does not contain a definition for 'Count' and no extension method 'Count' accepting a first argument of type .. could be found
我的实现方式与存储库完全相同,所以我不知道为什么会失败
存储库:
public abstract class Repository<CEntity, TEntity> : IRepository<TEntity> where TEntity : class
where CEntity : DbContext, new()
{
private CEntity entities = new CEntity();
protected CEntity context
{
get { return entities; }
set { entities = value; }
}
public virtual int Count
{
get { return entities.Set<TEntity>().Count(); }
}
public virtual IQueryable<TEntity> All()
{
return entities.Set<TEntity>().AsQueryable();
}
}
public interface IRepository<TEntity> : IDisposable where TEntity : class
{
int Count { get; }
IQueryable<TEntity> All();
}
服务:
public class CampaignService : ICampaignService
{
private readonly IRepository<Campaign> _campaignRepository;
public CampaignService(IRepository<Campaign> campaignRepository)
{
_campaignRepository = campaignRepository;
}
public int Count
{
get { return _campaignRepository.Count()**; }
}
public IQueryable GetAll()
{
return _campaignRepository.All();
}
}
public interface ICampaignService
{
int Count{ get; }
IQueryable GetAll();
}
**它在这一行失败了。
`错误4'MarketingSystem.Repositories.Common.IRepository'不包含'Count'的定义,也没有扩展方法'Count'接受类型'MarketingSystem.Repositories.Common.IRepository'的第一个参数'(你错过了使用指令或程序集引用吗?)
GetAll()
/ All()
方法正常,但Count()
没有。
有人能发现并解释我哪里出错了吗?
答案 0 :(得分:3)
您正试图在存储库上调用Count()
。您的存储库既不是IQueryable<T>
也不是IEnumerable<T>
,因此您无法使用扩展方法Count()
。实际上,您的存储库仅实现IRepository<TEntity>
只有三个成员可用 - Dispose()
,Count
和All()
。我想你需要从这个界面调用Count
属性。
get { return _campaignRepository.Count; }
注意 - Count
不是方法 - 它是属性。
答案 1 :(得分:1)
删除()
public int Count
{
get { return _campaignRepository.Count; }
}
Count是Repository中的属性,但您将其作为方法
进行访问