簡體   English   中英

在 LINQ 到 SQL 中處理 DataContext 的最佳方法

[英]Best way to handle the DataContext in LINQ to SQL

我已獲准在我們的 ASP.NET 應用程序中為新模塊實施 LINQ 到 SQL。 我忘記了處理檢索對象所需的 DataContext 的最佳方法; 我應該在每種使用它的方法中創建它,還是有某種實用程序 class 以不同的方式管理它?

例如,我有一個 class,ActiveRecord 樣式檢索一個實體。 我應該使用類似的東西:

using (MyAppDataContext context = new MyAppDataContext()) 
{
    // do stuff here...
}

在每種方法中? 我在 LINQ 教程中經常看到這個,但我也看到了一種方法,其中有一個Utilities class 有一些方法可以返回 DataContext ( GetContext或類似的); 我忘記了該方法是否只是新方法的包裝,或者它是否執行了某種單例類型的機制。

哪種方法更好?

就個人而言,我使用類似的東西:

public class MyClass : MyBaseClass
{
     public void GetData()
     {
          using(DbDataContext db = new DbDataContext())
          {
              // DO STUFF
          }
     }

     public void PerformLogicallyAtomicAction()
     {
          using(DbDataContext db = new DbDataContext())
          {
              // DO STUFF
          }
     }
}

除非有任何需要保持數據上下文打開更長時間。

更新

為了進一步澄清我這樣做的原因:

1)我不想要 memory 中的 object 比我需要的時間長

下面是主要原因

2)在某些情況下,跟蹤更改數據會導致數據過時(參見 OP 的第二條評論)

3)創建新的object需要0時間(有效)

4)通過每次需要時創建它,我可以更改特定的 LINQ 選項(例如 ObjectTrackingEnabled (我經常關閉)

我將使用 class / object 來包含您用於此數據存儲庫的方法。 我使用 class 實例化數據上下文,然后我可以使用它來讀取數據並隨后更新它並保持在相同的上下文中。

我還使用這個 class 來集中連接字符串,以便我在整個應用程序中訪問這些特定數據時保持一致:

public class MyInfoRepository
{
    MyInfoDataContext _dc;
    public MyInfoRepository()
    {
        try
        {
            _dc = new MyInfoDataContext(GetDbConnection());
        }
        catch (Exception ex)
        {
            ExceptionLogger.LogServerException(ex, TraceEventType.Error);
            throw;
        }
    }

    private static string GetDbConnection()
    {
        // if no connection string return empty which will stop processing
        if (ConfigurationManager.ConnectionStrings["MyInfo"] == null)
        {
            throw new ConfigurationErrorsException("No connection string specified.");
        }

        string connection = ConfigurationManager.ConnectionStrings["MyInfo"].ConnectionString;

        return connection;
    }

...

正如您的一些評論所述,我不會保持開放狀態,而是將其用於特定查詢並可能使用 using () 語句進行更新。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM