2010-07-01 109 views
0

所以希望有一些CSLA技能可以幫助我看到更好的方法。我有一種情況,我想從對象外部手動創建事務,並將我的transactionAttribute設置爲手動。在csla和手動交易系統中使用交易

所以我有一些代碼,看起來像這樣:

using (SqlConnection conn ConnectionManager<SqlConnection>.GetManager("Db").Connection) 
{ 
    connectionTransaction = conn.BeginTransaction(); 

    objectRef = objectRef.Save(); 

    //other logic here 

    objectRef = objectRef.Save(); 
    connectionTransaction.Commit(); 
} 

然後保存方法中有這樣的事情對於數據訪問:

using (var conn = ConnectionManager<SqlConnection>.GetManager("Db").Connection) 
{ 
    using (var cm = conn.CreateCommand()) 
    { 
     cm.CommandType = CommandType.StoredProcedure; 
     cm.CommandText = "Proc_Name"; 

     // param definitions 

     cm.ExecuteNonQuery(); 
    } 
} 

當我做到這一點我收到以下錯誤:

當分配給命令的連接處於未決的本地事務中時,ExecuteNonQuery需要該命令進行事務。該命令的Transaction屬性尚未初始化。

好了,這樣才能理解它在說什麼,我可以通過將事務分配給命令來輕鬆修復。但我想知道這是否按照CSLA的最佳實踐正確構建。我似乎無法在最近得到的書中找到一個很好的例子。

我只是無法想象,告訴我的域對象代碼像在事務中那樣行爲的時候,有時候可能會出現這種情況。

任何人都可以告訴我什麼我需要做的事情來解決這個問題嗎?

回答

0

好吧,我需要改變很多東西。但是,這種情況的一個明顯問題是,我在使用聲明中使用了連接。一旦它退出,它將被處置掉。由於這個事務經過了幾個這樣的方法,結果證明我的連接和事務在第一次調用後被處理掉了。

我剛剛有一個時刻,我意識到這一點。我討厭有時候答案會如此明顯。