我有一个处理所有数据库操作的类。我读到过,最好将多个 DataContext 实例用于不同的读/写/更新/删除操作,而不是一个长期存在的 DataContext 实例。
这意味着每个在数据库上进行读/写/更新/删除的函数都需要这样做:
public int GetSomeID(string name)
{
using (XXDataContext context = new XXDataContext(connStr))
{
...
}
}
public int GetAnotherID(string name)
{
using (XXDataContext context = new XXDataContext(connStr))
{
...
}
}
public void WriteSomething(string text)
{
using (XXDataContext context = new XXDataContext(connStr))
{
...
}
}
反对仅在构造函数中使用此 using() 并将上下文作为私有(private)成员变量可用于每个函数调用。
在保留每次函数调用时创建新 DataContext 的功能的情况下,是否可以将此 using() 移动到其他地方,以便不是每个函数都必须在其中包含这一行?
最佳答案
您可以使用这样的方法来避免重写 using
代码:
private static void WithContext(Action<XXDataContext> action)
{
using(XXDataContext context = new XXDataContext(connStr))
action(context);
}
private static T WithContext<T>(Func<XXDataContext, T> function)
{
using(XXDataContext context = new XXDataContext(connStr))
return function(context);
}
这允许你写:
public int GetSomeID(string name)
{
WithContext(context =>
{
//TODO use context
});
}
如果对你有帮助的话。
关于c# - 在每个函数中使用 DataContext,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23366816/