我的存储库模式出现问题,今天早上工作正常,所以我不明白这是我的代码:
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'类型的第一个参数可能是 结果
我只是想在控制台中显示登录列表,我做错了什么?
答案 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>
方法提供此类常规功能。