我有一个Generic Repository类,见下文,用于执行常见的数据访问功能,即Add,GetByID等。
public class GenericRepository<TEntity> : IGenericRepository<TEntity> where TEntity : class
{
internal GolfEntities context;
internal DbSet<TEntity> dbSet;
public GenericRepository(GolfEntities context)
{
this.context = context;
this.dbSet = context.Set<TEntity>();
}
public TEntity GetByID(object id)
{
return dbSet.Find(id);
}
我想创建另一个源自此Generic Repository类的Repository类,以便我可以执行其他不属于Generic Repository类的函数,例如,获取用户的全名。
我创建了一个名为UserRepository的类,见下文,它来自Generic Repository,但是,我在编译时遇到错误:
Repository.GenericRepository&LT;使用者名称&gt;不包含带0参数的构造函数
public class UserRepository : GenericRepository<User>, IUserRepository
{
internal GolfEntities _context;
public UserRepository() : base() { }
public UserRepository(GolfEntities context)
{
_context = context;
}
public string FullName()
{
return "Full Name: Test FullName";
}
}
有谁知道如何解决这个问题?
非常感谢任何帮助。
感谢。
答案 0 :(得分:5)
您应该从派生的存储库中删除默认构造函数:
public UserRepository() : base() { }
由于您的基础存储库类没有无参数构造函数,因此调用base()
没有意义。此外,您不需要在派生构造函数中重复与基础构造函数中相同的逻辑。你只能调用它:
public class UserRepository : GenericRepository<User>, IUserRepository
{
public UserRepository(GolfEntities context): base(context)
{
}
public string FullName()
{
return "Full Name: Test FullName";
}
}
答案 1 :(得分:3)
将您的UserRepository更改为:
public class UserRepository : GenericRepository<User>, IUserRepository
{
public UserRepository(GolfEntities context)
: base (context)
{
}
public string FullName()
{
return "Full Name: Test FullName";
}
}
您的GenericRepository没有默认构造函数,因此您需要调用期望您的GolfEntities上下文并将参数传递下来的构造函数。
答案 2 :(得分:1)
基础(通用)存储库没有无参数的默认构造函数,所以你不能这样写:
public UserRepository() : base() { }
您需要调用其中一个基类构造函数。