2013-12-10 25 views
0

最近我問了一個問題(CRUD operations with connected POCOs instead of disconnected POCOs in EF code first),並基於這個和這個評論(CRUD operations with connected POCOs instead of disconnected POCOs in EF code first),現在我想在我的項目中使用連接POCOs,所以我有另一個問題。在EF代碼中的DbContext的生命週期在WinForm項目中首先

但是我想,如果我使用視圖模型,當我使用的DbContext實例從數據庫獲取我的數據,並將它們映射到的意見,當我想持久性用戶的變化,DbContext所述先前實例(即取的數據)現在不存在(因爲例如當我從我的DAL調用GetOrders(),DbContext創建並處理),所以我應該在客戶端管理我的POCOs狀態,並將它們複製回新創建的DbContext(位於我的DAL的SaveOrder()中)。

我正確嗎?

+0

你是對的。您處於「MVC範式」中:視圖是winform和控制器,功能上等同於Web服務器,通過DTO從單獨的程序集調用。 (儘可能經常)。控制器是DAL和域之間的鏈接(即業務邏輯),域本身就是另一個組件。集會的分離不是必須的,但它可以幫助保持好的地方。 (這裏很可能是主觀的) – tschmit007

+0

@ tschmit007那麼我該如何解決這個問題?(丟失連接的實體狀態) – Masoud

+0

通常我給連接字符串作爲屬性給我的表單。形成連接字符串,你可以做任何事情,包括instanciate上下文。對於國家來說,就像你在網絡環境中做的一樣。 – tschmit007

回答

0

您可以將DbContext變量定義爲DAL類上的靜態字段來解決此問題。

 private static YourAppContainer _dbContainer; 
     public static YourAppContainer DbContext 
     { 
      get 
      { 
       try 
       { 
        return _dbContainer ?? (_dbContainer = new YourAppContainer()); 
       } 
       catch (Exception ex) 
       { 
        throw new Exception(ex); 
       } 
      } 
     } 
+0

但是,如果我設置我的DbContext靜態,想要在單獨的層中使用我的DAL?我的意思是說,如果我的DAL在多個用戶之間共享(在服務器端),那麼我認爲你的解決方案無法正常工作。 – Masoud

+0

您應該在DAL圖層中創建一個門面類以訪問DAL方法和其他成員。實體框架還支持多用戶和多線程,不用擔心。 – Mojtaba

相關問題