C# 如何在存储库模式中处理对象上下文
我为我的应用程序dat实现了一个存储库模式 我有:C# 如何在存储库模式中处理对象上下文,c#,asp.net,.net,entity-framework-4,C#,Asp.net,.net,Entity Framework 4,我为我的应用程序dat实现了一个存储库模式 我有: public class EFRepository<T> { DbContext // My db context public IQureable<T> GetQuery() { DataContext.CreateQuery(...); } } 公共类eRepository { DbContext//My db context 公共iqreable GetQuery
public class EFRepository<T>
{
DbContext // My db context
public IQureable<T> GetQuery()
{
DataContext.CreateQuery(...);
}
}
公共类eRepository
{
DbContext//My db context
公共iqreable GetQuery()
{
CreateQuery(…);
}
}
现在假设我有一个用户存储库:
公共类UserRepository:EFRepository
{
公共UserGetUserDetails(int userId)
{
GetQuery(),其中(u=>u.Id=userId).First();
}
}
我的问题是,当我在派生存储库中使用EF存储库时,如何释放DbContext
。
假设:UserRepository:EFRepository
,它使用GetQuery
,然后我必须处理上下文
如何在通用存储库中实现这一点,有什么好主意吗?我过去使用过类似的模式,在我的例子中,我实际上继承了
DbContext
,它本身实现了IDisposable
。如果您在使用
块中使用eRepository
或从它派生的类,您应该可以
如果您希望使用
DbContext
成员变量,那么eRepository
将需要实现IDisposable
并从其Dispose
方法调用DbContext.Dispose()
。您应该考虑一下自己拥有什么。(互联网上还有许多其他教程)。其思想是保持相同的dbcontext,并在相同的工作单元中重复使用它。这样,当需要实体时,它们已经被附加到上下文中,等等
现在,这是一个web应用程序,在本例中,您的工作单元将是一个请求。在同一请求中,重用DBContext。有很多方法可以做到这一点,而且我不知道——你会想要像“OnActionExecuting”这样的东西,在这里你可以处理你的上下文
但更好的方法是使用控制模式的反转(有很多框架都使用这个,我主要使用。这将在需要时自动创建某个类的新实例,具体取决于您建议的范围-在本例中为“onRequestScope”。关于IoC还有很多要说的,但不是问题的范围谢谢。但我有一个问题。在我的报告中添加了任何方法从eRepository派生的ory,使用get查询而不是上下文,get查询使用上下文,因此如何在此处使用dispose。您是否可以用您在本例中所做的示例更新您的问题?非常感谢,实际上这就是您所做的,我使用了unity IOC,他们有一个perexecutelifetimemanager,这意味着共享同一请求的实例。非常感谢。