数据库对象在SubSonic中的重用

数据库对象在SubSonic中的重用,subsonic,subsonic3,subsonic-active-record,Subsonic,Subsonic3,Subsonic Active Record,另一个新手亚音速/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 = n

另一个新手亚音速/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/company_选项构造函数都会创建一个新的myappDB对象,这看起来很浪费


这是推荐的方法还是我应该尝试重复使用单个DB对象?如果是,最简单的方法是什么?

我相信如果您想使用相同的对象,可以将其
IsNew
属性设置为
true
,然后更改其数据属性,再次保存,然后重复。很简单


不过,我不太确定你是否应该麻烦。这取决于那些构造函数对您的伤害有多大。

在我看来,将多个对象分配给一个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();
如果您担心性能,那么这不应该是一个问题,除非您希望同时插入或更新多个对象。同样,在这种情况下,插入数据所用的时间比创建对象所用的时间要长

如果您担心性能,可以使用插入查询跳过对象创建并完全保存部分:

db.Insert.Into(
x=>x.name,
x=>x.value,
x=>x.company\u id)
.价值观(
“配色方案”,
“红色”,
c、 公司id
).Execute();
   db.Insert.Into<company_option>(
     x => x.name, 
     x => x.value,
     x => x.company_id)
    .Values(
        "ColorScheme",
        "Red",
        c.company_id
    ).Execute();