Visual Studio 2015存储库模式不包含defintion

时间:2017-02-22 14:30:48

标签: c# entity-framework repository-pattern

我的存储库模式出现问题,今天早上工作正常,所以我不明白这是我的代码:

IRepository:

public interface IRepository<T> where T : class
{
    List<T> GetAll();
    List<T> GetSome(int index, int pageSize);
    T GetOne(int id);
    T Add(T entity);
    void Update(T entity);
    void Delete(T entity);            
}

IUserRepository:

interface IUserRepository : IRepository<User>
{
}

UserRepository:

public class UserRepository : IUserRepository
{
    public User Add(User entity)
    {
        throw new NotImplementedException();
    }

    public void Delete(User entity)
    {
        throw new NotImplementedException();
    }

    public List<User> GetAll()
    {
        return new SchoolContext().User.ToList();
    }

    public User GetOne(int id)
    {
        throw new NotImplementedException();
    }

    public List<User> GetSome(int index, int pageSize)
    {
        throw new NotImplementedException();
    }

    public void Update(User entity)
    {
        throw new NotImplementedException();
    }
}

测试文件:

class Program
{
    static void Main(string[] args)
    {
        var source = new User().GetAll();
        foreach (var item in source)
        {
            Console.WriteLine(item.Login);
        }

        Console.Read();

    }
}

我在测试文件中得到的错误是:

  

用户不包含“GetAll”的定义,也没有扩展名   method'GetAll'接受'User'类型的第一个参数可能是   结果

我只是想在控制台中显示登录列表,我做错了什么?

1 个答案:

答案 0 :(得分:5)

您应该创建存储库:

var source = new UserRepository().GetAll();
                       ^

但您正在创建User实体。

提示:每次调用存储库上的任何方法时,都应该将上下文传递给存储库,并为所有操作使用一个上下文,而不是创建上下文。否则,您必须将实体附加到新上下文以进行修改,因为新上下文不会跟踪实体。并且在处理延迟加载的实体时,控制上下文的生命周期以避免上下文处理类错误会更好。

public class UserRepository : IUserRepository
{
    private SchoolContext db;

    public UserRepository(SchoolContext db)
    {
        this.db = db;
    }

    public List<User> GetAll()
    {
        return db.User.ToList();
    }    
}

更多事件 - 您可以创建基本抽象存储库Repository<T>,它将通过上下文中的Set<T>方法提供此类常规功能。