C# 在一个类中多次重构SqlConnection的使用
我有一些代码,它们形成了一个以数据库为中心的类,该类执行CRUD操作。Insert()和Select()方法使用相同的连接字符串。目前,通过重复设置SqlConnection的标准位,这两种方法都是重复的 如何最好地重构它?我应该拥有SqlConnection的属性吗C# 在一个类中多次重构SqlConnection的使用,c#,C#,我有一些代码,它们形成了一个以数据库为中心的类,该类执行CRUD操作。Insert()和Select()方法使用相同的连接字符串。目前,通过重复设置SqlConnection的标准位,这两种方法都是重复的 如何最好地重构它?我应该拥有SqlConnection的属性吗 谢谢我通常用两种方法中的一种来做 包含连接到数据库的静态方法和属性的类。然后我可以在我需要的任何其他类中使用它 连接到数据库的类中的SqlConnection属性。然后在需要时从控制类注入连接 到目前为止,第一个选项是最常用的
谢谢我通常用两种方法中的一种来做
- 包含连接到数据库的静态方法和属性的类。然后我可以在我需要的任何其他类中使用它
- 连接到数据库的类中的SqlConnection属性。然后在需要时从控制类注入连接
第二种选择的好处是它更加灵活;如果服务器、用户或密码发生更改,只需在控制类中更新该信息即可。这取决于您的应用程序。就我而言:不。你可能想添加一个新方法来建立连接(这甚至可能是个好主意),但是作为字段/属性的连接听起来像“我在表单的整个生命周期中打开一个连接”,这在我的世界中是邪恶的 创建一个helper方法并编写如下内容
using (var connection = CreateSqlConnection()) {
// Do the operations here
}
将所有DB操作拉到一个类中,并将该类传递给需要它的对象。您可以通过构造函数注入来实现这一点(每个新对象都会获得一个传递给它的IDBProvider,然后用于数据库操作) 大概是这样的:
public interface IDBProvider {
// ... list of DB operations you care about
List<Products> GetProducts(string vendor)
}
public class SomeWorkerClass {
private IDBProvider dbConnection;
public SomeWorkerClass(IDBProvider dbProvider) {
dbConnection = dbProvider;
}
public void SomeFunction() {
List<Products> = dbConnection.GetProducts("test");
}
}
公共接口IDBProvider{
//…您关心的数据库操作列表
列出产品(字符串供应商)
}
公共类someworker类{
私有连接;
公共SomeWorkerClass(IDBProvider dbProvider){
dbConnection=dbProvider;
}
公共函数(){
List=dbConnection.GetProducts(“测试”);
}
}
有很多框架可以为您完成这类工作,例如,但在某些情况下,您也可以轻松地启动自己的框架(升级现有代码、不需要外部框架依赖关系的组织等)。您不必一直打开连接;只要在需要时传递连接(或连接字符串)以供使用就足够了。Michael,我就是这么说的。至少这就是我的意思,我看不出文本的含混之处?我的印象是,你认为这种联系不仅存在,而且在它的整个生命周期中都保持着开放状态。如果这不正确,我误解了你。在第二种方法中,你的意思是连接来自调用连接到db/的类的成员的类吗?是的,或者,至少,一个ConnectionString被传递到执行数据库工作的类中。这样做的想法是,您有一个“主”类来运行该节目(您的SqlConnection或ConnectionString将在这里创建和维护),而实际执行数据库工作的每个“从”类将在创建时接收该连接。这样,您只需在一个地方维护SqlConnection。