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

时间:2014-11-05 16:34:18

标签: 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;
                }
            }
        }
    }
}

1 个答案:

答案 0 :(得分:1)

如果你重复使用它们并不重要。他们实现了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;
}

因此,选择最具可读性和故障安全的方法。