2011-01-27 65 views
0

我能夠立即獲得活動記錄。入門指導非常棒,我很快就構建了一個web服務,可以讓我在現有數據庫中創建和讀取小部件。太棒了。但是,當更新時,事情就會崩潰。我會編輯客戶端上的對象並將其發送回服務,但是當服務保存時,它只會創建一個新對象。我推斷這意味着我需要重新查詢數據庫,並分配從客戶端發送到服務的值,但我的老闆說這將是hacky,並且存儲庫模式會更好,因爲可以使用pocos。不幸的是,這是我得到的指導的程度。所以這是我的問題。3層應用程序亞音速倉庫入門

  1. 是T4模板只爲活動記錄良好,否則將建立 你爲你 簡單的倉庫了。例如,有沒有什麼 也會創造我的pocos或他們都'滾動你自己'?

  2. 有沒有人看到亞音速3層 解決方案的工作示例?我已閱讀關於它們,但 是否有任何樣品漂浮 ?

活躍的記錄樣本/屏幕錄像非常容易遵循,因爲它們始於我開始時的相同點。簡單的存儲庫似乎更多地關注遷移和其他高級功能,並且因爲這些東西對我來說是新的,我不足以將點連接起來。

呃。沒有什麼比這個截止日期能夠學習一些東西,並在本週末之前運行。任何建議都會受到歡迎,即使它與我應該閱讀的手冊的鏈接是rtfm。

在此先感謝

回答

0

如果你想使用存儲庫模式,你可以使用linq templates或使用簡單的存儲庫,它不需要任何T4模板。

使用簡單的存儲庫,您可以自己創建pocos。亞音速可以創建或更新數據庫方案,爲你,如果你選擇:

var repository=new SimpleRepository(SimpleRepositoryOptions.RunMigrations); 

,但如果你問我,我會選擇SimpleRepositoryOptions.None和自己更新數據庫。

無論如何,你最初的問題與ActiveRecord模板可以修復很容易。 我建議你的ActiveRecord對象在客戶端序列化並在服務器上反序列化。

一個ActiveRecord對象的默認構造函數調用初始化函數,它看起來像這樣:

void Init(){ 
     TestMode=this._db.DataProvider.ConnectionString.Equals("test", StringComparison.InvariantCultureIgnoreCase); 
     _dirtyColumns=new List<IColumn>(); 
     if(TestMode){ 
      <#=tbl.ClassName#>.SetTestRepo(); 
      _repo=_testRepo; 
     }else{ 
      _repo = new SubSonicRepository<<#=tbl.ClassName#>>(_db); 
     } 
     tbl=_repo.GetTable(); 
     SetIsNew(true); 
     OnCreated();  

    } 

正如你可以看到,在創建內部存儲庫和SetIsNew(true)執行。 您必須做的唯一事情是在對象被反序列化的值填充後調用myitem.SetIsNew(false)。我想這足以告訴亞音速在保存期間執行更新查詢。