2

我已經使用Visual Studio 2012創建了一個新的控制檯應用程序,並使用實體框架映射了我的數據庫表。現在我用做到以下幾點,當我與Web應用程序,如MVC的工作,是要創建一個表示實體和參考所有可用的實體一個新的對象:在我的控制檯應用程序內調用實體框架類

class Program 
{ 
    SEntities sd = new SEntities(); 
    static void Main(string[] args) 
    {    
      sd.Levels.Add(new Level() { Name = "from CA" }); 
      sd.SaveChanges(); 
    } 
} 

,但這將引發以下錯誤:

An object reference is required for the non-static field, method, or property 'ConsoleApplication1.Program.sd' .....\ConsoleApplication1\Program.cs 16 17 ConsoleApplication1

我讀了一些文章,看來我需要通過打開using塊引用我的控制檯應用程序中的實體框架類,如下所示:

class Program 
{ 
    static void Main(string[] args) 
    { 
     using (SEntities sd = new SEntities()) 
     { 
      sd.Levels.Add(new Level() { Name = "from CA" }); 
      sd.SaveChanges(); 
     } 
    } 
} 

所以我的問題是,爲什麼我不能按照第一種方法將整個方法封裝在使用塊聲音中並不奇怪?

回答

2

的問題是,你正試圖在一個靜態方法來使用非靜態字段。一個沒有在靜態方法的範圍內聲明的更具體一點。 using塊不是導致第二個代碼塊工作的原因。它工作的原因是因爲你在靜態方法內部有非靜態字段,而不是在靜態方法外部。

但是,你其實應該使用using塊,因爲這將確保上下文配置。

+0

好的我明白了你的觀點,那麼有沒有辦法避免使用「使用」塊? –

+0

'using'塊確保調用上下文的Dispose()方法;釋放非託管資源。在所有的現實中,你不必使用它,但最佳實踐將另有說明。另一種選擇是「try/finally」。在'finally'手動調用'Dispose()'。 –

+0

但我無法在我的情況下引用「sd」,除非我在我的使用塊中傳遞實體類。 –

相關問題