c# - 在每个函数中使用 DataContext

标签 c# sql datacontext

我有一个处理所有数据库操作的类。我读到过,最好将多个 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/

相关文章:

asp.net-mvc - 从基本 Controller 继承 LINQ-to-SQL 数据上下文

c# - 我可以使用 FakeItEasy 伪造 Properties.Settings.Default 属性吗?

c# - 公共(public) API 的正确命名空间

c# - 我使用 inno setup 来检测是否安装了 .net 4.0 客户端,但效果不佳

c# - .net core + MongoDB 如何动态创建数据库

c# - 如何在 LINQ to SQL 中查看导致 SubmitChanges 出错的 sql?

sql - 如何在 SQL 中将天数与时间一起添加到日期列

php - 我可以将几个查询替换为一个吗

WPF 简单绑定(bind)到 INotifyPropertyChanged 对象

c# - 如何将数据上下文回滚到最后一次提交更改的点