2010-03-01 23 views
0

又一個新手的SubSonic/ActiveRecord問題。假設我要插入一些記錄,目前我在做這個:在亞音波中重複使用數據庫對象

using (var scope = new System.Transactions.TransactionScope()) 
{ 
    // Insert company 
    company c = new company(); 
    c.name = "ACME"; 
    c.Save(); 

    // Insert some options 
    company_option o = new company_option(); 
    o.name = "ColorScheme"; 
    o.value = "Red"; 
    o.company_id = c.company_id; 
    o.Save(); 
    o = new company_option(); 
    o.name = "PreferredMode"; 
    o.value = "Fast"; 
    o.company_id = c.company_id; 
    o.Save(); 

    scope.Complete(); 
} 

通過這個代碼步進但是,每個公司/ company_option構造熄滅,並創建一個新的myappDB對象,它似乎只是浪費。

這是推薦的方法,還是應該試圖重新使用單個數據庫對象 - 如果是這樣,最簡單的方法是什麼?

回答

0

我相信你可以使用相同的對象,如果你想通過設置其IsNew屬性爲true,然後改變它的數據屬性,再次保存,重複。很簡單。

雖然我不太確定你應該打擾。這取決於那些構造者傷害你的程度。

0

在我眼中,將多個對象分配給單個var絕不是一個好主意,但這是可以爭論的。我這樣做:

// Insert some options 
company_option o1 = new company_option(); 
o1.name = "ColorScheme"; 
o1.value = "Red"; 
o1.company_id = c.company_id; 
o1.Save(); 

company_option o2 = new company_option(); 
o2.name = "PreferredMode"; 
o2.value = "Fast"; 
o2.company_id = c.company_id; 
o2.Save(); 

我你擔心的表現,除非你想插入或者一次更新許多對象不應該是一個問題。再次,在這種情況下,用於插入數據的時間比創建對象花費的時間要長。

如果你擔心性能,你可以通過使用一個插入查詢跳過對象創建和保存部分完全地:

http://www.subsonicproject.com/docs/Linq_Inserts

db.Insert.Into<company_option>(
    x => x.name, 
    x => x.value, 
    x => x.company_id) 
    .Values(
     "ColorScheme", 
     "Red", 
     c.company_id 
    ).Execute();