2012-03-18 51 views
3

我試圖讓我的頭如何在MVVM(WP7)應用程序中使用Linq2Sql。我想我理解MVVM的基礎知識,我用這種模式編寫了一些簡單的可測試應用程序,但我不確定應該如何將它與L2S結合起來。MVVM Linq2Sql和DataContext

我不明白一些事情。我如何管理DataContext?我是否每個應用都有一個(我將如何跟蹤對實體的更改並將它們傳播到數據庫)?我可以直接綁定到生成的模型L2S類嗎?如何跟蹤對數據庫所做的更改?或者我應該使用存儲庫模式,哪些事件回調?另一件事,讓虛擬機很容易測試,我使用一個系統的依賴注入和服務的應用程序的一些系統。典型的例子是從互聯網上下載的服務 - 使它可測試,我製作和接口,以及兩個實現它的類 - 一個用於生產,一個用於測試,返回虛擬數據。我的問題是,我應該這樣做的數據庫訪問嗎?假設所有的L2S查詢都只在這個服務中完成,那麼應用程序的其餘部分完全不受L2S的影響。或者是沒有意義的,我應該只需要一個全局的DataContext對象/單例並從任何地方訪問它?

正如你所看到的,我有很多問題:)我很想聽聽你的意見

+0

有人可能糾正我,如果我錯了,但我認爲你也應該在實體上使用MVVM模型。我認爲不直接將數據庫掛接到UI中是個好主意,但使用ViewModelWrappers。 +1對於一個好問題,我也開始使用MVVM,並且我也發現它對DataContext也感到困惑。順便說一句。我根本不確定是否支持Windows Phone(有一個,但還沒有研究過開發:)但是您是否也有LinqToEntities,因爲LinqToEntities看起來比Linq2Sql更有前途。 – Silvermind 2012-03-18 22:45:10

+1

Linq2Sql在WP7上可用(windows phone實際上是我的目標平臺),我不知道LinqToEntities,我從來沒有聽說過它,thx的提示。 我總是將用戶虛擬機作爲包裝,但有時代替重複模型的所有屬性(並跟蹤這些屬性的更改),我將底層模型對象設置爲公共只讀,以便視圖可以直接綁定到它。但仍然存在控制整個集合(ObservableCollection)的問題 - 您無法綁定到表。但是,你如何向你的ObservableCollections傳播增加/刪除? – 2012-03-19 19:09:43

回答

1

我認爲你是在正確的軌道上,或許按照Repository模式。如果你對國際奧委會感到滿意,那就遵循相同的道路。我可能會考慮嘲笑你的數據接口,但從長遠來看,我發現它更容易。

如果你關心數據庫上下文行爲,它自身(例如更新跟蹤)不......不是從單元測試的角度來看。這是更全面的集成測試(從手機應用程序的角度來看有趣,但你知道我的意思!)

請記住,您的手機上只有一個用戶,並牢記onomstoning。

+0

所以你說的是遵循存儲庫模式,但使用它的接口,所以我可以稍後模擬存儲庫進行測試? – 2012-03-19 19:16:46

+0

剛剛有一個想法,如何做到上述,而不是在存儲庫中的所有查詢(併爲這些查詢編寫方法 - 這是令人討厭的,因爲你必須在3個地方寫 - 界面,真正的實現和模型)我只公開DataContext以供其他對象使用。但是,這將無助於跟蹤插入/刪除...嗯,只是一個想法然後 – 2012-03-19 19:22:12

+0

嗯,我認爲找到該場景的在線教程將很容易!這是我的意思是:[http://scottdepouw.com/blog/let-rsquo-s-unit-test-some-linq-to-sql/]如果任何人有一個更具體的例子... ? – 2012-03-20 00:52:03