通用存储库中的 DbContext 和 DbSet 问题
DbContext and DbSet issues in Generic repository
我正在尝试创建一个将在我的所有项目中扮演存储库角色的项目。
想法:
这个想法的灵感来自 通用存储库模式 ,所以我正在尝试创建一个 generic class
将成为存储库。
此 class 将在实例化时收到 dbcontext
。
class 将实现 Interface
.
界面:
interface IRepo<Tcontext> where Tcontext : DbContext
{
void GetAll<Table>();
}
回购 class :
public class Repo<Tcontext>:IRepo<Tcontext> where Tcontext: DbContext
{
private Tcontext _Context { get; set; } = null;
private DbSet _Table { get; set; } = null;
public Repo()
{
_Context = new Tcontext();
}
public void GetAll<Table>()
{
_Table = new DbSet<Table>();
return _Context.Set<Table>().ToList();
}
}
所以,这个想法,假设我们有这个 dbcontext class:DBEntities
,如果我想 select 来自 Client
table 的所有记录],然后在另一行中我想要 select 来自 Order
table
的所有记录
我会用:
Repo<DBEntities> repo = new Repo<DBEntities>();
var clients repo.GetAll<Client>();
var orders repo.GetAll<Order>();
问题是什么:
Repo
class中的问题。
问题是四个错误我不知道如何解决它们。
错误:
那么,有任何解决此问题的帮助吗? 并在此先致谢。
前两个错误 The Table must be a reference type....
已记录,因为您尚未定义函数的约束。如下所示更改签名;使用下面的签名,该方法限制泛型类型 Table
应该是引用类型。
public void GetAll<Table>() where Table : class
第三个错误,因为没有 public DBContext 的默认构造函数。您应该使用参数化的。检查 DBContext 定义 here
_Context = new Tcontext(connectionString);
第四个错误将在添加前两个错误后自动解决,因为定义了通用参数 Table
约束。您可以在 here.
检查 Set
函数的签名
我正在尝试创建一个将在我的所有项目中扮演存储库角色的项目。
想法:
这个想法的灵感来自 通用存储库模式 ,所以我正在尝试创建一个 generic class
将成为存储库。
此 class 将在实例化时收到 dbcontext
。
class 将实现 Interface
.
界面:
interface IRepo<Tcontext> where Tcontext : DbContext
{
void GetAll<Table>();
}
回购 class :
public class Repo<Tcontext>:IRepo<Tcontext> where Tcontext: DbContext
{
private Tcontext _Context { get; set; } = null;
private DbSet _Table { get; set; } = null;
public Repo()
{
_Context = new Tcontext();
}
public void GetAll<Table>()
{
_Table = new DbSet<Table>();
return _Context.Set<Table>().ToList();
}
}
所以,这个想法,假设我们有这个 dbcontext class:DBEntities
,如果我想 select 来自 Client
table 的所有记录],然后在另一行中我想要 select 来自 Order
table
我会用:
Repo<DBEntities> repo = new Repo<DBEntities>();
var clients repo.GetAll<Client>();
var orders repo.GetAll<Order>();
问题是什么:
Repo
class中的问题。
问题是四个错误我不知道如何解决它们。
错误:
那么,有任何解决此问题的帮助吗? 并在此先致谢。
前两个错误 The Table must be a reference type....
已记录,因为您尚未定义函数的约束。如下所示更改签名;使用下面的签名,该方法限制泛型类型 Table
应该是引用类型。
public void GetAll<Table>() where Table : class
第三个错误,因为没有 public DBContext 的默认构造函数。您应该使用参数化的。检查 DBContext 定义 here
_Context = new Tcontext(connectionString);
第四个错误将在添加前两个错误后自动解决,因为定义了通用参数 Table
约束。您可以在 here.
Set
函数的签名