C# 将数据库名称或整个数据库作为变量传递

C# 将数据库名称或整个数据库作为变量传递,c#,database,linq,variables,C#,Database,Linq,Variables,我正在通过提取函数重构代码 最初,我有一个巨大的主函数,它在第一行使用从外部传入的dbName立即获取数据库,然后基于数据库执行其他一些操作 现在我想让这些其他的东西成为一些小函数,由现在更小的主函数调用 这些小函数需要访问同一个数据库 我是否- 每次调用一个小函数时都传递dbName,并在其中获取数据库 这似乎有些多余,如果我有n个小函数,那么我需要获取数据库n次 将整个数据库传递到小函数中,并立即使用它 这会导致性能问题吗 还有一个问题: 我知道我们可以用 var table=da

我正在通过提取函数重构代码

最初,我有一个巨大的主函数,它在第一行使用从外部传入的dbName立即获取数据库,然后基于数据库执行其他一些操作

现在我想让这些其他的东西成为一些小函数,由现在更小的主函数调用

这些小函数需要访问同一个数据库

我是否-

  • 每次调用一个小函数时都传递dbName,并在其中获取数据库

    • 这似乎有些多余,如果我有n个小函数,那么我需要获取数据库n次
  • 将整个数据库传递到小函数中,并立即使用它

    • 这会导致性能问题吗

  • 还有一个问题:

    我知道我们可以用

    var table=database.GetCollection()
    获取并将表存储到一个变量中,这样我们就可以使用它,而不是在每次需要查找某个内容时再次获取它

    但是,当我想要执行的操作是修改时,它会起作用吗

    如果我使用
    插入然后查找,我能得到刚才插入的记录吗


    我的意思是,
    table
    是指我插入之前的表吗?

    根据您提供的信息,您的选项2很可能是最佳选择

    您不会将整个数据库传递到函数中,而只是对它的引用,因为大多数对象都是通过引用传递的,而不是通过值传递的(除非它们是值)

    table
    应该是对表的引用(比如
    DbSet
    ),而不是对处于当前状态的表的引用(如果需要,您需要调用
    table.ToList()
    ,它应该返回
    List
    并存储它。)


    因此,调用
    table.Add(object)
    然后调用
    table.Find(object.ID)
    应该返回数据库中当前的对象

    您使用什么访问数据库?实体框架?我认为你的问题不适合这个网站。在这里,在StackOverflow上,我们通常处理“不工作”代码(至少“工作不符合预期”)。如果你的代码确实有效,并且你想要一个代码检查,你可以尝试一下。这是一个很好的开始将代码划分为功能区域的方法。我认为您正在寻找一个数据访问层。一个单独的类,带有静态方法,负责与数据库的所有通信。数据的大小将决定您可以在数据集和数据表中本地存储多少数据。