c# - 我应该重用表适配器实例吗?

标签 c# .net database

我目前有一个类似于下面的类(省略了错误检查)

目前这是将数据库包装成更易于使用的对象的方式。

我想知道如果我应该一次创建表适配器然后重新使用它们,而不是为每个订单创建一个新的表适配器,我是否要加载 50,000 个订单?

我没有看到任何真正的速度问题这样做。但是最好不要每次都创建新的表适配器吗?

如果是这样,是否有一个预先存在的模式来处理这个问题?

class Order
{
    public int Id {get; private set;}
    public string CustomerEmail { get; set; }
    public SaleLocaion SalePoint { get; set; }

    public Order(int orderId)
    {
        using (var ta = new OrdersTableAdapter())
        {
            using (var res = ta.GetDataById(orderId))
            {
                if (res.Count == 1)
                {
                    var row = res.First();
                    Id = row.Id;
                    CustomerEmail = row.Email;
                    SalePoint = new SaleLocaion(row.SaleLocationId);
                }
            }
        }
    }
}



class SaleLocaion
{
    public int Id {get; private set;}
    public string Name { get; private set; }

    public SaleLocaion(int locationId)
    {
        using (var ta = new SaleLocationAdapter())
        {
            using (var res = ta.GetDataById(locationId))
            {
                if (res.Count == 1)
                {
                    var row = res.First();
                    Id = row.Id;
                    Name = row.Name;
                }
            }
        }
    }
}

最佳答案

重用与否并不重要。它们实现了 IDisposable,但只是因为它们继承自 Component,后者由于 DataSet 的拖放功能而实现了 IDisposable。但是,由于 DataSetDataTable 实现 IDisposabledon't really need to be disposed 的原因相同,没有必要处理它们。 .

构造函数或字段初始化也非常便宜,因为所有字段都是 null 并且构造函数仅包含:

public OrdersTableAdapter() { // an examplary auto-generated table-adapter constructor
    this.ClearBeforeFill = true;
}

因此,请选择最易读且最安全的方法。

关于c# - 我应该重用表适配器实例吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26762300/

相关文章:

c# - 从包含树状数据的 DataTable 或 List 填充 TreeView

c# - C#/.Net 中的 SSL MaxFragmentLength 扩展

sql - 从join myself中选择第一行

mysql - 如何启动具有特定增量值的mysql列?

c# - 序列化 XNA 4.0

c# - 从组合框 C# 表单发送文本作为 SQL 过程的输入

c# - Windows Phone 8.1 中的录像机应用程序

c# - 当客户在加拿大时,如何让 Stripe 结账显示 249 加元且含 5% 税的价格,而在世界其他地区则显示 249 美元且不含税?

c# - 如何覆盖现有的 zip 文件?

database - 你如何删除 Postgresql 数据库?