2010-03-01 28 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();