2014-11-05 62 views
1

我目前有一个类似于下面的类(省略错误检查)我应该重新使用表适配器实例吗?

目前这是如何将数据库封装成更容易使用的对象。

我想知道如果我要加载说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

如果你重复使用它们并不重要。它们实现了IDisposable,但仅仅因为它们继承自Component,由于DataSet的拖放功能,它们实现了IDisposable。但没有必要为了DataSetDataTable实现IDisposable而不是don't really need to be disposed的原因来处理它们。

构造函数或字段初始化也很便宜,因为所有领域都null和构造只包含:

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

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

+0

谢谢,这是否意味着我可以放弃使用ta.GetDataById()? – james 2014-11-05 16:44:52

+1

@james:如果返回一个'DataTable',是的。 – 2014-11-05 16:48:51

相关问题