我正在開發一個WPF應用程序(.NET 3.5SP1)。場景是這樣的:LINQ to SQL更新WPF應用程序中的問題
1.使用SQL Metal提取實體定義(和相應的映射文件),後來用於數據訪問層(所以我使用LINQ to SQL)。
2.使用Unity(此應用程序是「基於PRISM的」)來註冊抽象類及其相應的實現(例如IRepository和ActualRepository,IDataContext和ActualContext,IUnitOfWork和ActualUnitOfWork等等 - 類名是不是真正的,但這裏並不重要)
3.MVVM樣式用於創建ViewModel和View。
插入和刪除工作得很好..但後來我發現這個怪異的行爲:
一)通過創建一個新的記錄,並填寫一些字段的用戶能夠保存這個(新)記錄只有一次! !如果用戶忘記將某些數據插入其他字段並嘗試保存此記錄(再次),則這些更改不會反映在dbms中!
因此,用戶關閉了應用程序,再次打開應用程序並加載(之前插入的)記錄。現在:每次更改這些記錄實際上反映到dbms!
我認爲它必須與DataContext的問題(這是創建這樣:
public SQLDataContext(string connectionString)
{
dc = new DataContext(connectionString, Mapping.GetMapping());
}
)
我做了一些谷歌搜索,發現關於分離對象的一些問題。我不確定這是否與我的情況有關,但是閱讀一些博客我明白它必須!
長話短說:我以爲我在我的表中使用時間戳字段。 b)Said ..done!Et瞧:新創建的記錄在第一次保存後可以保存多次。即使關閉和重新開放應用程序工作正常!
但是:araised一個新問題!
一個視圖使用了一些組合框。只要我們播放的這條記錄是實際記錄,綁定到這些組合框的字段就會正確更新。當我們移動到下一個記錄時,之前的當前記錄將其字段(綁定到組合框)分配給null!我認爲這是一個具有約束力的問題,並且很明顯地在組合框中放置了雙向綁定模式,但沒有結果。
這讓我瘋狂! (在情況a)我沒有遇到這些問題!!!!)
綁定到TextBoxes的字段按預期工作! 順便說一句:我沒有得到任何綁定錯誤!
所以:有人可以解釋爲什麼情況a)的行爲是這樣嗎?爲什麼b)綁定到WPF組合框的字段表現如此呢?
在此先感謝
問題茲是另一個新(); } 正如我上面所說,我使用的是團結。所以我擔心的是Unity會始終返回相同的上下文! –
2009-12-11 07:24:45
DataContext
實例時(重新)我創建Datacontext這樣: using(IUnitOfWork unitOfWork = UnitOfWork.Begin()) { unitOfWork.Commit(); } 和UnitOfWork.Begin()被以這種方式定義: 公共靜態IUnitOfWork開始() { 返回ServiceLocator.Current.GetInstance您是否正在使用單獨的工作單位進行保存和提取? – 2009-12-11 13:15:41
我認爲我找到了解決我的問題(谷歌搜索多一點後): a)刪除時間戳字段 b)保存記錄涉及檢查(在UnitOfWork.Begin()後): if(newRecord){add (object)} else {refresh(object)}; commitWork(); 希望這是固定的! 但我仍然有這個問題與組合框! – 2009-12-11 16:10:45