2009-01-19 67 views
5

我們使用我們編寫的企業框架來促進我們所做的各種公司特定的事情。C#,Winforms&LINQ to SQL .. Datacontext生命週期?

在框架內,我們提供了一個LINQ to SQL ORM以在適當的時候使用。所有這些都基於Microsoft MVC框架。在MVC方面,我們在基礎控制器中創建了一個數據上下文。這使我們有一個完整的數據上下文生命週期,這對於事務非常有用。

我們希望完成的一項任務是提供Winforms支持。

但是,我正在撞牆,試圖找出一種方法,以類似於Winforms的方式工作。

鑑於MVC方法非常簡單,因爲一個頁面加載代表了邏輯事務,所以很難在Winforms方面提出解決方案。

有沒有人做過類似的事情或有任何建議?

回答

2

我對去年建立的一些小軟件做了類似的事情。

我們創建了一個應用程序shell,它可以類似於請求/響應模型加載表單。

我建立了一個IRenderer接口,我用RenderView()方法實現了web和windows窗體。它允許我爲兩者使用相同的控制器和模型。在goodle上搜索Model-View-ViewModel(MVVM),你可能會發現這種方法。我認爲this article可能會幫助你理解我在說什麼。

+0

非常感謝您的信息! – 2009-01-19 21:12:48

3

如果您正在考慮選擇具有長壽命的DataContext(例如作爲應用程序中的Singleton)還是具有短期DataContexts,我會選擇第二個。我會爲每個「工作單元」new()一個DataContext,並確保儘可能短地保持它活着。創建新的DataContext不是一個大問題,因爲它們無論如何都緩存元數據。擁有一個長期存在的DataContext,當它開始跟蹤許多對象時,會給你一點噩夢。

+0

+1單位的工作是這裏的關鍵詞。桌面應用程序仍在執行不同的業務交易,這些業務交易可以並且應該分成不同的工作單元。這些應該控制datacontext的生命週期 – 2009-01-20 21:20:13

0

只有一個datacontext的問題是你不能有多個打開的編輯,只提交一個。對於很多應用程序模型來說,這是一個非啓動器。因此,我有一個用於讀取的單例數據環境,併爲每個提交操作創建一個。更新函數將要保存的對象從讀取的datacontext中分離出來,並將它們附加到新的提交數據上下文中,然後運行DC.Submit更改。

唯一棘手的是有一種方法來跟蹤對象是否應該在提交時插入或插入時進行更新,以及如果您有標準的auto num主鍵或在某個集合中管理哪個列應該作爲檢查插入與更新的類別,這是相當微不足道的。

+0

Downvoted用於保持讀取的長期數據上下文。這是收集陳舊數據的好方法。是的,你可以刷新,但是你保存數據會失去任何性能收益。只有在需要獲取或放置數據時才使用上下文也簡化了記錄保存,並且不需要擔心是否插入或更新對象。 (如果你有一個標識欄,你可以檢查它的內容,無論如何......如果它沒有被寫入,則沒有任何內容。) – 2009-12-17 19:25:39

0

我知道這個線程有點老,但在unhaddins中我們有一個Conversation-per-BusinessTransaction的實現。目前我們只有nhibernate的實現,但是將它用於Linq到sql或實體框架應該很簡單。 查看我在list的回答。