不包含定义或扩展方法 - 当它做的时候

时间:2014-03-20 10:07:44

标签: c# asp.net-mvc entity-framework compiler-errors

我已将服务添加到我的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()没有。

有人能发现并解释我哪里出错了吗?

2 个答案:

答案 0 :(得分:3)

您正试图在存储库上调用Count()。您的存储库既不是IQueryable<T>也不是IEnumerable<T>,因此您无法使用扩展方法Count()。实际上,您的存储库仅实现IRepository<TEntity>只有三个成员可用 - Dispose()CountAll()。我想你需要从这个界面调用Count属性。

get { return _campaignRepository.Count; }

注意 - Count不是方法 - 它是属性。

答案 1 :(得分:1)

删除()

public int Count
{
    get { return _campaignRepository.Count; }
}

Count是Repository中的属性,但您将其作为方法

进行访问