2014-11-05 71 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

相關問題