Entity framework EF:如何在using语句中包含上下文对象?
假设我有以下类:Customer.cs、contextOfficeContext.cs和repositoryofficepository.cs。知道上下文使用连接对象,建议使用语句将其括在中:Entity framework EF:如何在using语句中包含上下文对象?,entity-framework,dbcontext,Entity Framework,Dbcontext,假设我有以下类:Customer.cs、contextOfficeContext.cs和repositoryofficepository.cs。知道上下文使用连接对象,建议使用语句将其括在中: public List<Customer> GetAllCustomersWithOrders() { using(var oContext = new OfficeContext()) { //Code here.... } } 公共列表GetAllCusto
public List<Customer> GetAllCustomersWithOrders()
{
using(var oContext = new OfficeContext())
{
//Code here....
}
}
公共列表GetAllCustomerWithOrders()
{
使用(var oContext=new OfficeContext())
{
//代码在这里。。。。
}
}
我的问题是,如果我想重用存储库中已有的一些代码,该怎么办?例如,如果我想显示所有订购了产品但尚未收到的客户,是否需要复制代码
public List<Customer> GetCustomersNotReceiveProducts()
{
using(var oContext = new OfficeContext())
{
//Re-use GetAllCustomersWithOrders() here???...
}
}
公共列表GetCustomersNotReceiveProducts()
{
使用(var oContext=new OfficeContext())
{
//在此处重复使用GetAllCustomerWithOrders()???。。。
}
}
但正如您所看到的,每次访问一个方法时,我都会打开并实例化一个新的上下文对象。有没有办法解决这个问题?我要做的是让我的存储库实现IDisposable 然后有两个构造函数(一个默认值)实例化一个新上下文,将其作为类级变量保存。另一个构造函数接受上下文并在内部使用它 在dispose类上,上下文被释放(如果当前存储库安装了上下文) 这会将上下文从方法级别移除,并将其移动到类级别。我的函数将所有内容都保存在IQueryable中,以便一个函数可以调用另一个函数,并在它访问数据库之前执行额外的优化 Exmaple:
public class MemberRepository : IDisposable
{
OfficeContext db;
bool isExternalDb = false;
public MemberRepository()
{
db = new OfficeContext();
isExternalDb = false;
}
public MemberRepository(OfficeContext db)
{
this.db = db;
isExternalDb = true;
}
public IQueryable<Member> GetAllMembers()
{
var members= db.Members
return members;
}
public IQueryable<Member> GetActiveMembers()
{
var members = GetAllMembers();
var activeMembers = members.Where(m => m.isActive == true);
return activeMembers;
}
public void Dispose()
{
if (isExternalDb == false)
{
db.Dispose();
}
}
}
using(var memberRepository = new MemberRepository())
{
var members = memberRepository.GetActiveMembers();
}